2

環境

ファイル (ブロブ) を Google アプリのブロブストアにアップロードするために使用するデスクトップ JAVA アプリケーションがあります。インターネットへの直接接続ではすべて正常に動作しますが、認証を使用して HTTP プロキシ (Squid) 経由で接続するとうまくいきません。

httpClient 4.2.3 を使用していますが、エラーや応答がありません。を呼び出すときにスタックしhttpClient.execute(post)ます。

コード

プロキシ認証を処理するためにこれらの行を追加しましたが、URL を使用してページを取得するときにうまく機能します。

    System.setProperty("http.proxyUser", username);
    System.setProperty("http.proxyPassword", password);    

私もそれらを試しました:

    Authenticator.setDefault(
       new Authenticator() {
           @Override
          public PasswordAuthentication getPasswordAuthentication() {
             return new PasswordAuthentication(
                   username, password.toCharArray());
          }
       }
    );

これ以降、これはプロキシを使用しない場合に機能するのと同じコードです。

まず、ブロブストアにファイルを投稿するために使用する URL を取得するページをダウンロードします。

    URL url = new URL("http://www.example.com/get-upload-url.jsp");        
    String urlWhereToPost=IOUtils.toString(url.openStream());  
    
    DefaultHttpClient  client = new DefaultHttpClient ();

ここで、マルチパート投稿を準備します。

    HttpPost post
             = new HttpPost( urlWhereToPost.trim() );
    MultipartEntity entity 
             = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE);

    entity.addPart( "key" 
                    , new FileBody(new File(jpgFilePath)
                    , "image/jpeg" )
                    );

    post.setEntity((HttpEntity)entity);
       

そして、何も起こらないのは execute を呼び出すときです (そして、次の命令に到達することはありません):

    HttpResponse execute = client.execute( post );

テスト

私はいくつかのことを試してきましたが、何もうまくいきませんでした:

  • 最初は、問題は GET を使用して POST を使用していると思っていましたが、URL() 使用して GET を実行しようとしHttpClientたところ、スタックしてしまいました。
  • Wireshark を使用してプロキシに送信されたパケットを確認したところ、Wireshark を使用すると、プロキシURL()への呼び出しがプロキシからの GET を実行する要求として認識されることがわかりました。しかし、httpClient を使用すると、Wireshark はパケットを表示しますが、内部の要求を認識しないため、要求が適切に構築されていないように見えます。
  • 次に、使用して POST を構築しようHttpURLConnectionとしましたが、プロキシを通過し、サーバーから回答を取得しましたが、送信したファイルが appengine で見つからないため、うまく構築できていないようです (ただし、これは別の質問になります.. .)。

結論

同じ問題を抱えている人はいますか?何か案が?

4

1 に答える 1

1

プロキシ設定は Java システム クラス用です。Apache HttpClient は、別の方法で構成する必要があります。このリンクが役立つ場合があります:プロキシ認証

于 2013-02-05T00:49:10.850 に答える