ホームページ  >  記事  >  バックエンド開発  >  goでtcp接続経由でhttpリクエストを行う

goでtcp接続経由でhttpリクエストを行う

王林
王林転載
2024-02-09 12:20:09799ブラウズ

goでtcp接続経由でhttpリクエストを行う

php editor Strawberry が Go 言語で TCP 接続を介して HTTP リクエストを行う方法を紹介します。 Web 開発では、多くの場合、他のサーバーと通信してデータを取得したり、リクエストを送信したりする必要があります。 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.1http/1.1 である必要があります。

他の人の役に立つことを願って、このスペルミスを発見した経緯を共有したいと思いました。

あまり詳しくない問題を解決したいとき、私が最初にやることは、それが機能するとどのようになるかを調べることです。 nc を使ったことがあるので、まずはそれを試してみます。

これは nc マニュアル ページの例です:

リーリー

そこで、まず host.example.comwww.google.com に置き換えました。 :

リーリー ###それは動作します!

次に、

http/1.0http/1.1 に置き換えます。まだ動作します!

次に、

host ヘッダーを追加します: リーリー ###効率的!

次に、質問内の文字列をコピーします:

リーリー

今回は

400 Bad Request

を受け取りました。 これは大きな前進です!リクエストに問題がありました。 2 つのリクエストを比較することで、入力エラーを簡単に発見できます。

最後に、元のデモのタイプミスを修正し、デモを実行して問題が解決されたことを確認します。仕上げる!

###読んでくれてありがとう!

以上がgoでtcp接続経由でhttpリクエストを行うの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。