首頁  >  文章  >  後端開發  >  go中透過tcp連線發出http請求

go中透過tcp連線發出http請求

王林
王林轉載
2024-02-09 12:20:09801瀏覽

go中透過tcp連線發出http請求

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除