2017-11-08 21 views
-3

サービスとの古い統合を、pythonからgolangに書き直しています。このサービスは、カスタムステータスコードを使用します。たとえば、ステータスコードは8000です。しかし、私は応答を取得しようとしている間、私に "不正なHTTPステータスコード"としてエラーが出ています。この問題を解決するのに役立つ人もいます。コードをゴーンとステータスコードがEDIT 3Golang HttpカスタムリクエストのHTTPリクエストコードでクライアント要求が失敗する

if len(statusCode) != 3 { 
    return nil, &badStringError{"malformed HTTP status code", statusCode} 
} 

の長さは持っていない場合は、エラーがスローされます以下のコードが見つかりました:私は、HTTPステータスのRFC標準は3桁の数字であることを理解します を。しかし、私は銀行システムのレガシーコードを再統合しています。だから私はできない/サービスの実装を変更するアクセス権を持っていない。

もっと多くの文脈を与えるために、pythonのhttpライブラリはこの検証を行っていませんでした。 (私はある言語が他の言語よりも優れていると言っているわけではないので、言語/ライブラリを比較してはいけません)この特定の検証をバイパスする方法があるかどうか疑問に思っています。 RFC 2616からの理解のために事前に 感謝..

+3

この問題を解決するには、ステータスコードを修正する必要があります。 8000は有効なHTTPではありません。根本的なバグを修正できない場合は、package net/httpの機能を使用することはできません(HTTPを使用していないため):低レベルの関数(ネットなど)を使用して、疑似HTTPを処理するために必要なものを再実装します。 – Volker

+0

実際、ここでの問題は 'net/http'ではなく、ステータスコードです。仕様に従って、HTTPステータスコードはすべて正確に3桁であるため、Goのクライアントはこのように実装されています。 – Adrian

+0

私は、RFC仕様がステータスコードが3桁でなければならないと言っていることを理解しています。しかし、問題は、私が統合しようとしているサービスが非常に古い遺産の銀行のAPIであるということです。そして、私たちはそれを支配していません。また、問題はnet/httpであるとは言いません。しかし、私はレガシーコードのこの検証をバイパスする方法があるかどうかを尋ねています。 – user2101845

答えて

1

ステータスコード要素は、あなたがそこにある持っている何 試み

の3桁の整数の結果コードです無効なHTTPです。ソケットを直接保持することができれば、生のTCPデータを解析することができます。

+0

ソケットを直接聴く方法を理解できますか? – user2101845

+0

厳密に言えば、基本的なプロトコルに違反しているため、HTTPサービスではありません。 golangのhttpライブラリを自分で作成し、それらにパッチを当てることができます。私は、誰もがこのパッチを主流に受け入れることはないと確信しています。これは、プロトコルに従っている未知数のクライアントを壊すことを意味するからです。したがって、あなた自身でそれを維持する必要があります。幸いにもパッチは問題ではないでしょう。あなたのテストを忘れずに、すべての標準テストが動作し続けることを確認してください。 –

1

一般的な情報(OK、クライアントエラー、サーバーエラーなど)の標準コードと、ペイロードで転送されるカスタムアプリケーションコードを使用して詳細を確認してください。

+0

私が統合しているサービスは、HTTPサーバーの動作を変更するためのコントロールがありません。このサービスは従来の銀行システムであり、既存のAPIを銀行の末尾から変更することは難しい。 – user2101845

関連する問題