1. ホーム
  2. java

[解決済み] httpClient.execute(httpget, responseHandler)でClientProtocolExceptionが発生する。

2022-02-18 07:52:59

質問事項

私は以下のコードを使って、Webサーバーからxmlを要求しています。

HttpClient httpclient = new DefaultHttpClient()
try 
{
    HttpGet httpget = new HttpGet("http://63.255.173.242/get_public_tbl.cgi?A=1");              
    ResponseHandler responseHandler = new BasicResponseHandler();
    String responseBody = httpclient.execute(httpget, responseHandler);
    System.out.println(responseBody);
}
catch (ClientProtocolException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
} 
finally 
{
    httpclient.getConnectionManager().shutdown();
}

httpclient.execute(httpget, responseHandler)を呼び出すとclientProtocolExceptionが発生するんだけど。 URLはWebブラウザで問題なく動作し、xmlを返し、ブラウザはそれを表示します。

なぜclientProtocolExceptionが発生し、ブラウザはそれをうまく処理するのか、何か思い当たることはありますか?

1を編集します。

プロトコル例外の詳細メッセージを見ると、"The server failed to respond with valid HTTP response"と表示されています。 ヒットするWebサーバーを変更することができません。 これを無視してレスポンスにアクセスする方法はないでしょうか?

編集2

サーバーが完全なヘッダーを送り返していないことがわかりました。 壊れたヘッダーが返された場合でも、レスポンスの内容にアクセスする方法はあるのでしょうか?

編集3:ipアドレスを編集して、実際に打っているipアドレスにしました。 何か手助けがあれば、とてもありがたいです。

解決方法は?

あなたのコードが正しいように見えるので、あなたは把握する必要があります。これはクライアントのせいなのか(リクエストが無効)、サーバーのせいなのか(レスポンスが無効)。これを行うには httpトレースユーティリティ で、ブラウザのリクエストとクライアントのリクエストを比較します。また、サーバーからの生の応答があれば、それを見ることができます。もし、解決できない場合は、質問に生のリクエストとレスポンスを追加すれば、誰かが助けてくれるかもしれません。