目錄
問題內容
解決方法
首頁 後端開發 Golang go中透過tcp連線發出http請求

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

Feb 09, 2024 pm 12:20 PM
go語言 標準函式庫

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何理解C  中的ABI兼容性? 如何理解C 中的ABI兼容性? Apr 28, 2025 pm 10:12 PM

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

.NET Core快速入門教程 1、開篇:說說.NET Core的那些事兒 .NET Core快速入門教程 1、開篇:說說.NET Core的那些事兒 May 07, 2025 pm 04:54 PM

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

C  中的chrono庫如何使用? C 中的chrono庫如何使用? Apr 28, 2025 pm 10:18 PM

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

如何在Python中創建SQLite數據庫? 如何在Python中創建SQLite數據庫? May 23, 2025 pm 10:36 PM

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

解析 Go 語言中 map 在擴容時可能引發的性能問題 解析 Go 語言中 map 在擴容時可能引發的性能問題 May 23, 2025 pm 10:00 PM

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

怎樣在C  中測量線程性能? 怎樣在C 中測量線程性能? Apr 28, 2025 pm 10:21 PM

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

了解GO界面:綜合指南 了解GO界面:綜合指南 May 01, 2025 am 12:13 AM

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

使用PhpStorm進行Go語言開發的環境搭建 使用PhpStorm進行Go語言開發的環境搭建 May 20, 2025 pm 07:27 PM

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

See all articles