7

次のコードを使用して、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:

プロトコル例外を見ると、詳細メッセージは「サーバーは有効なHTTP応答で応答できませんでした」です。ヒットしているWebサーバーを変更できません。これを無視して応答にアクセスする方法はありますか?

編集2:

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

編集3:IPアドレスを編集して、ヒットしている実際のIPアドレスにしました。どんな助けでも大歓迎です。

4

6 に答える 6

8

コードは正しいように思われるので、次のことを理解する必要があります。これはクライアントの障害(無効な要求)なのか、サーバーの障害(無効な応答)なのか。これを行うには、http trace utitlityを使用して、ブラウザーの要求をクライアントの要求と比較します。サーバーからの生の応答がある場合は、それを確認することもできます。それがわからない場合は、質問に対する生のリクエストと回答を追加してください。誰かが助けてくれるかもしれません。

于 2012-10-30T23:48:09.587 に答える
2

私はあなたのコードを私のIPアドレスでテストしました。コードにエラーはありません。に変更ResponseHandlerしましたBasicResponseHandler

これをチェックして

 HttpClient httpclient = new DefaultHttpClient();
    try 
    {
        HttpGet httpget = new HttpGet("http://www.MyServer.com/get_public_tbl.cgi?A=1");               
        BasicResponseHandler responseHandler = new BasicResponseHandler();//Here is the change
        String responseBody = httpclient.execute(httpget, responseHandler);
        System.out.println(responseBody);
    }
    catch (ClientProtocolException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    } 
    finally 
    {
        httpclient.getConnectionManager().shutdown();
    }
于 2012-10-02T05:10:18.673 に答える
2

独自の応答インターセプターを追加して、ヘッダーを追加または削除したり、デバッグ情報を出力したりすることができます。

hc.addResponseInterceptor(new HttpResponseInterceptor() {
    @Override
    public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
        response.getEntity().writeTo(System.out);
    }
});
于 2012-10-09T13:24:49.243 に答える
1

クライアントに設定したヘッダーを確認し、ヘッダーのキーと値の両方を再確認します。私の場合、「Cookie」の代わりに「csrf」パラメータを使用していました。

于 2017-02-04T14:58:51.640 に答える
0

私は同様の問題に直面していました。ClientProtocolException
どうやらサーバーにはターゲットWebサービスSSLがなかった
ので、SSL構成が間違っていました。

根本的なエラーは次のとおりです。

  java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

トラストストアをJavaに追加した後、このエラーは消えました。

それが誰かを助けることを願っています。

于 2019-03-05T17:28:21.937 に答える
-2

私の場合、pomファイルから以下の依存関係を削除し、問題を修正しました。

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.9</version>
    </dependency>
于 2019-08-28T12:23:02.827 に答える