0

これについて SO で解決策を探しましたが、私の場合にはどれも当てはまらないようです。サード パーティ ドメインへのサービス呼び出しを行う必要があるアプリケーションがあります。このサービス呼び出しを行うためにジャージー クライアントを使用しています。この呼び出しを行うためのコードは次のとおりです。

ClientResponse resp = resourceWithParams.
                      header("Authorization", getAccessKeyId() + ":" +
                      hmacSha1.toUpperCase()).
                      post(ClientResponse.class,"");

resourceWithParamsジャージの Web リソースはどこにありますか。であってもPOST、Web サービスはクエリ文字列と空の本文を想定していることに注意してください。疑わしいデザインかもしれませんが、それは私たちが取り組まなければならないものです.

このセットアップは、ローカル マシンと preprod サーバーで問題なく動作しています。ただし、本番サーバーでは例外が発生します。

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused

以下に、私を正しい方向に向けるのに役立ついくつかのポイントがあります。

1) 製品サーバーのコマンド ラインで使用して Web サービスに要求を送信すると、有効な応答が得られるため、curlファイアウォールの問題はないようです。これは、Web アプリケーションを介して、つまり jersey クライアントを使用する Java コードを介して試行した場合にのみ発生します。

2) prod サーバーにプロキシが設定されていない

3) localhost から正常に動作します。

4)Rest Webサービスはhttpsを使用し、正しい証明書がサーバーにインストールされています。これは、本番環境でWebサービスが正常にcurl機能するという事実によって証明されています.

問題が何であるか、どこから調べ始めるべきかについてのアイデアはありますか?

編集:

前述のように、https を使用して Web サービスに接続していました。代わりに http を使用すると、機能しているように見えます。

4

1 に答える 1

2

セッションをセットアップして、tcpdump拒否された接続がどこから来ているかを確認することをお勧めします。特に、成功した接続と失敗した接続の両方について、ソース IP アドレスと宛先 IP アドレスが何であるかを確認します。

上記がテストするように設計されている 2 つの可能性があります。

  1. あなたはプロキシ サーバーを使用していないと言いますが、Java は実際にはシステムの残りの部分とは別のプロキシ構成を持っているため、機能しないプロキシ サーバーを使用するように Java が構成されている可能性があります。
  2. Java システムは、使用しているソース IP アドレスとは異なるソース IP アドレスを使用してリクエストを送信している可能性がありますcurl
于 2013-08-21T19:26:06.317 に答える