php エディタ Apple は、「proxyconnect tcp: tls: 最初のレコードが TLS ハンドシェイクのように見えない」問題に対する解決策を提供します。このエラーは通常、プロキシ サーバーを使用しているときに発生し、ネットワーク接続の問題を引き起こす可能性があります。この問題を解決する前に、まず問題の原因を理解する必要があります。次の簡単な手順で、この問題を解決してネットワーク接続が適切に機能していることを確認する方法を示します。
「Go で REST API を使用する方法」では、パブリック REST API を呼び出すための完全に動作するサンプル コードが提供されています。しかし、この例を試すと、次のエラーが発生します:
リーリーhttp ステータスに関するドキュメント
リーリーそして書類を転送します:
リーリーしたがって、TLS を使用せずにクライアントからプロキシ
への安全でない接続を有効にするように Dialcontext を構成する必要があると想定しています。でもどうすればいいのか分かりません。以下をお読みください:
も役に立ちません。一部では、同じエラー proxyconnect tcp: tls:first Record doesn't Look like a TLS handshake
が発生し、その理由を説明します:
しかし、Steffen の返信には設定方法のサンプル コードがありません DialContext func(ctx context.Context, network, addr string)
、Bogdan と cyberdelia はどちらも tls.Config{InsecureSkipVerify を設定することを推奨しています: true}
、たとえば
リーリー
しかし、上記は効果がありません。まだ同じエラーが発生します。そして、接続は依然として http://*
ではなく
https://*
これは、上記の提案を含めて適応させようとしたサンプルコードです:
リーリーmyClient からプロキシ経由でサーバーへの暗号化されていない接続を使用するように接続を構成するにはどうすればよいですか? DialContext func(ctx context.Context, network, addr string)
を設定すると、これを行うのに役立ちますか?何をするか?
私が試してみたところ:
リーリー内容:
カスタム ダイヤル機能customDialContext
:
この関数は現在、net.Dial
の単純なラッパーですが、必要に応じてカスタム ダイヤル ロジックを導入する場所を提供します。これは、ネットワーク接続を作成するためのカスタム ダイヤル機能として使用されます。
送信構成:
http.Transport
を特定の設定で構成します。これには、カスタム ダイヤル機能、環境内のプロキシ設定、証明書の検証 (テスト用) をスキップする TLS 構成が含まれます。 http.Transport
の構成も試みますが、証明書の検証をスキップする TLS 構成のみが含まれており、カスタム ダイヤルアップ機能やプロキシ設定は設定されていません。 クライアント構成:
http.Transport
を使用して新しい http.Client
を作成し、タイムアウトを 10 秒に設定します。 http.Transport
を使用して新しい http.Client
を作成しようとしますが、main
関数で、 new http.Client
は、デフォルトの Transport
と 10 秒のタイムアウトを含む client
変数をオーバーライドし、カスタム Transport
を事実上破棄します。 。 関数シグネチャ:
GetCatFact
関数と GetJson
関数が *http.Client
パラメーターを受け入れるように変更され、main# で使用できるようになります。 ## カスタム
http.Client で作成されました。
を渡さないため、
net/http パッケージによって提供されるデフォルトの
http.Client が使用されます。 。
GetCatFact 関数の URL を「https://catfact.ninja/fact」に復元します。
元のコードでは、TLS ハンドシェイク エラーを回避するために、URL が「http://catfact.ninja/fact」に変更されています。
TLS 証明書検証エラーを無視するメカニズムは、実際には、http.Transport
構造の TLSClientConfig
フィールドによって提供されます。具体的には、
フィールドを次のように設定します。 ###真実###:###
tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } client := &http.Client{Transport: tr}
该配置告诉 Go 跳过验证服务器的证书链和主机名,这是 TLS 握手过程的一部分。但是,它不会忽略其他类型的 TLS 握手错误或切换到非 TLS 连接。通常不建议在生产环境中使用 InsecureSkipVerify: true
,因为它会禁用重要的安全检查。
如果您想强制使用非 TLS(纯 HTTP)连接,通常只需使用 http://
URL,而不是 https://
URL。但是,如果服务器或代理服务器将 HTTP 重定向到 HTTPS(例如 http://catfact.ninja/fact
的情况),则客户端将遵循重定向并切换到 TLS 连接。
以上がproxyconnect tcp: tls: 最初のレコードが TLS ハンドシェイクのように見えないを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。