php小編草莓將為大家介紹如何在Go語言中透過TCP連接發出HTTP請求。在網路開發中,我們常常需要與其他伺服器進行通信,並取得資料或發送請求。 Go語言提供了豐富的標準函式庫,其中包含了用於建立TCP連接和發送HTTP請求的功能。透過掌握這些技巧,我們可以輕鬆地在Go語言中實現與其他伺服器的通信,實現資料的獲取和發送。接下來,讓我們一起來深入了解這個有趣的主題吧!
package main import ( "crypto/tls" "fmt" ) func main() { conf := &tls.Config{} conn, _ := tls.Dial("tcp", "www.google.com:443", conf) data := []byte("GET / HTTP1.1\r\nHost: www.google.com\r\n\r\n") conn.Write(data) buf := make([]byte, 5000) conn.Read(buf) fmt.Println(string(buf[:])) }
我嘗試透過原始 tcp 連線資料發出 http 請求,但收到 400 bad request 的錯誤回應,這是什麼問題。
資料中有錯誤。
http1.1
應為 http/1.1
。
我想分享我是如何發現這個拼字錯誤的,希望對其他人有幫助。
當我想要解決一個我不太熟悉的問題時,我做的第一件事就是找出它工作時的樣子。我之前使用過 nc ,所以我先嘗試一下。
這是 nc
手冊頁中的範例:
$ printf "get / http/1.0\r\n\r\n" | nc host.example.com 80
所以我先將 host.example.com
替換為 www.google.com
:
$ printf "get / http/1.0\r\n\r\n" | nc www.google.com 80
它有效!
然後將 http/1.0
替換為 http/1.1
。仍然有效!
然後新增 host
標頭:
$ printf "get / http/1.1\r\nhost: www.google.com\r\n\r\n" | nc www.google.com 80
有效!
然後複製問題中的字串:
$ printf "GET / HTTP1.1\r\nHost: www.google.com\r\n\r\n" | nc www.google.com 80
這次得到了 400 錯誤請求
。
這是向前邁出的一大步!請求中有問題。透過比較兩個請求很容易發現拼字錯誤。
最後,修復原始演示中的拼寫錯誤,並運行演示以驗證問題是否已解決。完成!
感謝您的閱讀!
以上是go中透過tcp連線發出http請求的詳細內容。更多資訊請關注PHP中文網其他相關文章!