request重定向_golang不想http自動處理重定向的解決方案

de728a53c307c151f6e5a2baf122e7ed.png

前言

????有時候發送http請求不想讓庫自動幫忙處理重定向,庫里面默認的是會把所有重定向都完成一遍,結果就是最后一個沒有重定向的請求的結果。因此需要一種方案直接獲取首次訪問的結果,不走重定向。go的http庫里面是使用如下代碼檢查重定向的,以前我傻傻的修改源碼讓下面這段代碼直接返回,這樣需要重新編譯go自帶的庫,后來發現更簡單的方案。

var shouldRedirect boolredirectMethod, shouldRedirect, includeBody = redirectBehavior(req.Method, resp, reqs[0])if !shouldRedirect {    return resp, nil}

解決方案

????下面代碼可以驗證自動處理重定向,以及不走重定向的方案。

package main import ("io/ioutil""log""net/http""time") func main() {go server()time.Sleep(time.Second)mUrl := "http://127.0.0.1:12345/post"{ // 常規方法req, err := http.NewRequest(http.MethodPost, mUrl, nil)if err != nil {log.Fatal(err)}resp, err := http.DefaultClient.Do(req)if resp != nil {defer resp.Body.Close()}if err != nil {log.Fatal(err)}byt, err := ioutil.ReadAll(resp.Body)if err != nil {log.Fatal(err)}log.Println(resp.StatusCode, "|", string(byt[:128]))} { // 去掉自動處理重定向req, err := http.NewRequest(http.MethodPost, mUrl, nil)if err != nil {log.Fatal(err)}resp, err := http.DefaultTransport.RoundTrip(req)if resp != nil {defer resp.Body.Close()}if err != nil {log.Fatal(err)}byt, err := ioutil.ReadAll(resp.Body)if err != nil {log.Fatal(err)}log.Println(resp.StatusCode, "|", string(byt[:128]))}} // 下面開啟一個服務,重定向到百度func server() {http.HandleFunc("/post", mPost)http.ListenAndServe(":12345", nil)} func mPost(w http.ResponseWriter, r *http.Request) {http.Redirect(w, r, "http://www.baidu.com", http.StatusFound)w.Write([]byte(time.Now().String()))}

結論

????如下的第一個請求是直接返回百度的網頁,及重定向以后的內容。第二個請求直接返回第一個302重定向的內容。

2020/10/14 13:11:56 200 |
2020/10/14 13:11:56 302 | 2020-10-14 13:11:56.6559382 +0800 CST m=+1.429170501

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396634.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言項目開發-項目架構和編程命名規范

一個項目的流程:1、公司市場人員與客戶交流,了解客戶、引導客戶使用公司最優資源并產出一份市場需求文檔 2、公司需求人員(BA)與客戶交流,了解客戶需求并產出一個軟件需求文檔 3、項目經理、開發小組成員、需求人員&am…

ajax登錄驗證的原理,ajax用戶登錄驗證-get和post提交方式,與工作原理—2018-8-15...

ajax用戶登錄驗證:實例html>Ajax實戰:表單驗證用戶登錄郵箱: 密碼: 提交let btn document.getElementsByTagName(button)[0];btn.onclick function () {//1.創建xhr對象let xhr new XMLHttpRequest();//2.監聽響應狀態xhr.onreadystatechange function(){// …

將Python腳本打包成可執行文件

Python是一個腳本語言,被解釋器解釋執行。它的發布方式: .py文件:對于開源項目或者源碼沒那么重要的,直接提供源碼,需要使用者自行安裝Python并且安裝依賴的各種庫。(Python官方的各種安裝包就是這樣做的&a…

float foo=42e1為什么錯_為什么重寫了equals()也要重寫hashCode()

小Hub領讀:雖然是很基礎的一篇文章,但是對于equals、hashcode兩個方法,相信很多人都與其中的規則不熟悉,來跟著小Hub花個8分鐘回顧一下!作者:不學無數的程序員https://my.oschina.net/u/4030990/blog/31341…

ssh客戶端_一款基于TAS框架的SSH客戶端蠕蟲

TEA是一款基于TAS框架的SSH客戶端蠕蟲,從本質上說,它是一個仿冒的SSH客戶端,它能夠修改tty輸入/輸出來實現任意命令執行,或通過SSH連接來上傳自身以實現滲透感染。為了實現該工具的正常功能,遠程主機需要滿足以下條件&…

Selenium入門11 滾動條控制(通過js)

這一節要有js基礎。做web端的UI自動化必須要有html,css,javascript前端基礎。 滾動條控制: 1 移動垂直滾動條 document.documentElement.scrollTop 2 移動垂直滾動條 document.documentElement.scrollLeft 3 找到某個元素,移動到可…

Qt之QNetworkInterface

簡述 QNetworkInterface類負責提供主機的IP地址和網絡接口的列表。 QNetworkInterface表示了當前程序正在運行時與主機綁定的一個網絡接口。每個網絡接口可能包含0個或多個IP地址,每個IP地址都可選擇性地與一個子網掩碼和/或一個廣播地址相關聯。這樣的列表可以通過…

第二周計劃

上周計劃回顧 3.5 ~ 3.11 數據: 評師網爬取,完成:2k條記錄 finished后端 數據結構 技術選型 學校API封裝未完成:后端負責人出差 工作暫停產品 功能設計:主要功能提交:原型圖 幾個頁面 每個頁面大概功能完成…

python編程軟件排行榜_PYPL 9月編程語言排行榜發布 Python一枝獨秀

開發者可以將 PYPL 作為一個參考,決定學習何種語言或 IDE,或者在新的軟件項目中使用何種語言或數據庫。9 月份的榜單如下:前五名分別是 Python、Java、JavaScript、C# 與 PHP。相比去年 9 月份的數據,除了 Python 大幅上漲了 4.5%…

分享到系統面板_win7電腦沒有nvidia控制面板怎么辦【解決方法】

我們在使用電腦的時候,當電腦顯卡出現問題導致屏幕畫面不清晰時,可以使用win7系統自帶nvidia控制面板,它能夠對顯卡進行設置,提升顯卡功能,不過很多電腦用戶點擊nvidia控制面板時卻提示nvidia顯示設置不可用&#xff0…

Python之數據加密與解密(hashlib、hmac、random、base64、pycrypto)--轉載

本文內容 數據加密概述Python中實現數據加密的模塊簡介hashlib與hmac模塊介紹random與secrets模塊介紹base64模塊介紹pycrypto模塊介紹總結參考文檔提示: Python 2.7中的str是字節串,而Python 3.x中的str是字符串。本文中的代碼都是通過Python 2.7實現的…

day3-文件操作之基本操作

一、文件的基本操作 文件內容: Somehow, it seems the love I knew was always the most destructive kind 不知為何,我經歷的愛情總是最具毀滅性的的那種 Yesterday when I was young 昨日當我年少輕狂1、read() 當read()函數中傳入整數(int)參數&#…

QT連接多種數據庫f方法及測試

QT提供了對多種數據庫的訪問支持,對SQL Server也可以通過ODBC來進行訪問。要想順利訪問SQL Server。 首先要保證以下幾點:1. QT編譯時已經編譯了QtSql2. 編譯了ODBC插件。可以通過 configure -plugin-sql-odbc來保證,也可以單獨編譯~/src/plu…

服務器如何實現電腦無線橋接,無線路由器WDS橋接成功副路由器下電腦無法上網怎么辦【解決方法】...

摘 要無線WDS橋接設置完成后,在副路由器管理面,運行狀態 無線狀態 中,WDS狀態顯示成功,但電腦通過副路由無法上網。該問題可能與主、副路由器的設置有關,如下圖所示: 解決辦法: 排查一&#xff…

spad 探測器_從光到光子—“單光子”探測器

光電探測器光電探測器是指在光輻射作用下將其非傳導電荷變為傳導電荷的一類器件。在電子學中,二極管是一種具有不對稱傳輸特性的雙端電子元件,在一個方向上對電流具有低(理想為零)電阻,在另一個方向上具有高(理想為無限)電阻。最常見的類型如…

天地圖專題五:在天地圖上繪制電子區域并保存數據

版權聲明:本文為博主原創文章,轉載請注明出處。 上一文章講了如何在天地圖上顯示坐標軌跡。 本文介紹如何在天地圖上繪制電子區域(電子范圍或電子柵欄),并且,我們要將我們繪制的電子區域的坐標數據保存到數…

Mysql中natural join和inner join的區別

假設有如下兩個表TableA,TableB TableA TableB Column1 Column2 Column1 Column3 1 2 1 3TableA的Column1列名和TableB的Column1列名相同。 SELECT * FROM TableA INNER JOIN TableB USING (Column1) SEL…

微信和支付寶的服務器在哪里,手機恢復出廠設置,里面支付寶與微信怎么辦?原來數據在這里...

當手機使用一段時間之后,因為硬件落后會出現卡頓、內存不足等情況,這個時候提高手機速度最直接的一個辦法就是恢復出廠設置,雖然不能從根源上解決問題,但是還是可以湊合個半年時間的。那么這個時候就出現一個問題,手機…

python線上編輯問題_python django - static文件處理與線上部署測試

static文件相關操作涉及:a. 文件位置與訪問路徑映射b. setting.py與static相關配置STATIC_URLSTATIC_ROOTSTATICFILES_DIRSc. html中對于static文件引用方式d. python manage.py collectstatic1. 開發環境-目錄結構2. setting.py 設置STATIC_URL /static/# STATIC_…

android arcgis 繪制圓_arcgis for android 定位 圓

不多說直接代碼 ,群里人共享的方法一: /*** 繪制圓,配合 cleargraphicLayer()清除** param center 圓心* param radius 半徑* param alpha 填充的透明度 0-100* param fillColor 填充的顏色*/public void DrawCircle(Point center, double radius, int a…