Javaのソケットを介してHTTPリクエストを送信するコードを作成しました。ここで、HTTP 要求を送信したサーバーから送信された HTTP 応答を取得したいと考えています。
3 に答える
あなたが何を求めているのかは完全には明らかではありません。リクエストをソケットに書き込んだと仮定すると、次に行うことは次のとおりです。
- ソケットを呼び出し
shutdownOutput()
て、リクエストが完了したことをサーバーに伝えます (コンテンツの長さを送信した場合は必要ありません)。 - ソケットの入力ストリームから応答を読み取り、 HTTP 仕様に従って解析します。
これは一連の作業であるため、独自の HTTP 要求ロジックをローリングするのではなく、Java に組み込まれており、応答のコンテンツとサーバーによって設定されたヘッダーを取得するためのメソッドが含まれているURLConnectionを使用することをお勧めします。 .
Jonが言ったように、HTTP仕様を読んでください。ただし、インターネット プロトコルは一般に行指向であるため、一度に 1 行ずつ応答を読み取ることができます。最初の行は応答になります。これに続いて、ヘッダーが 1 行に 1 つずつ続きます (継続がない場合)。ヘッダーの 1 つが content-type である body がある場合、これはコンテンツが何であるかを示します。コンテンツを読みたい場合は、コンテンツが送信されるさまざまな方法を理解する必要があります。コンテンツの長さのヘッダーがある (またはない) か、コンテンツがチャンクされている可能性があります (頭のてっぺんからヘッダーを思い出せません)。もちろん、コンテンツはテキストではなくバイナリの場合もあります。
うん!それは正しい!
応答は、入力ストリームによって数バイトのチャンクに明確に読み取られる必要があります...したがって、それを読み取り可能な形式に変換できます。しかし、それにも時間がかかります.... :(