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

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Stock Market GPT
人工智慧支援投資研究,做出更明智的決策

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C 中的ABI兼容性是指不同編譯器或版本生成的二進制代碼能否在不重新編譯的情況下兼容。 1.函數調用約定,2.名稱修飾,3.虛函數表佈局,4.結構體和類的佈局是主要涉及的方面。

一、.NETCore的起源談到.NETCore,就不能不提它的前身.NET。當年Java風頭正盛,微軟也對Java青睞有加,Windows平台上的Java虛擬機就是微軟依據JVM標准開發的,據稱是當時性能最佳的Java虛擬機。然而,微軟有自己的小算盤,試圖將Java與Windows平台捆綁,增加一些Windows特有的功能。 Sun公司對此不滿,導致雙方關係破裂,微軟隨後推出了.NET。 .NET從誕生之初就借鑒了Java的許多特性,並在語言特性和窗體開發等方面逐漸超越了Java。 Java在1.6版

使用C 中的chrono庫可以讓你更加精確地控制時間和時間間隔,讓我們來探討一下這個庫的魅力所在吧。 C 的chrono庫是標準庫的一部分,它提供了一種現代化的方式來處理時間和時間間隔。對於那些曾經飽受time.h和ctime折磨的程序員來說,chrono無疑是一個福音。它不僅提高了代碼的可讀性和可維護性,還提供了更高的精度和靈活性。讓我們從基礎開始,chrono庫主要包括以下幾個關鍵組件:std::chrono::system_clock:表示系統時鐘,用於獲取當前時間。 std::chron

在Python中創建SQLite數據庫使用sqlite3模塊,步驟如下:1.連接到數據庫,2.創建游標對象,3.創建表,4.提交事務,5.關閉連接。這不僅簡單易行,還包含了優化和注意事項,如使用索引和批量操作以提高性能。

Go語言中map擴容時會觸發性能問題,可以通過以下措施避免:1.預估map大小,設置合適的初始容量;2.分批處理數據,減輕單次擴容壓力;3.使用sync.Map應對高並發場景。

在C 中測量線程性能可以使用標準庫中的計時工具、性能分析工具和自定義計時器。 1.使用庫測量執行時間。 2.使用gprof進行性能分析,步驟包括編譯時添加-pg選項、運行程序生成gmon.out文件、生成性能報告。 3.使用Valgrind的Callgrind模塊進行更詳細的分析,步驟包括運行程序生成callgrind.out文件、使用kcachegrind查看結果。 4.自定義計時器可靈活測量特定代碼段的執行時間。這些方法幫助全面了解線程性能,並優化代碼。

Gointerfacesaremethodsignaturesetsthattypesmustimplement,enablingpolymorphismwithoutinheritanceforcleaner,modularcode.Theyareimplicitlysatisfied,usefulforflexibleAPIsanddecoupling,butrequirecarefulusetoavoidruntimeerrorsandmaintaintypesafety.

選擇PhpStorm進行Go開發是因為熟悉界面和豐富插件生態,但GoLand更適合專注Go開發。搭建環境步驟:1.下載並安裝PhpStorm。 2.安裝GoSDK並設置環境變量。 3.在PhpStorm中安裝Go插件並配置GoSDK。 4.創建並運行Go項目。
