0

私は現在、.net と Java の間のフェンスにまたがっているプログラマーですが、Java の経験が限られているため、.net に傾倒しています。自分で開発したのではなく、httpClient execute(get) (get は HttpsFactory) を実行して、クエリ文字列を持つ特定の URL で見つかった別のコード サーバーに存在する asp クラシック コードから応答を取得する Java アプリケーションを持っています。ユーザー認証情報を保存します。理由を聞かないでください。

私たちの QA チームがテストしているユーザーの 1 人は、良い応答を返していません。ASP側で検証された不正なパスワードを入力すると、接続していることがわかります。適切なエラー メッセージが生成され、元に戻りました。Fiddler はこれを検出していません。私はフィドラーサイトを見て、私のjvmがフィドラープロキシサーバーを通過するように設定しようとしました。しかし、私はこれを機能させることができません。私は最新の Java バージョン 1.7.0.21 を実行しています。

コマンドプロンプトで次を実行しました

jre -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 および jre -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 MyApp

jreは認識されません。私も試しました:

java -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 MyApp および java -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888

プロパティが認識されない

私も試しました

java -Dhttp.proxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888

Javaコマンドの使用法を取得するだけです。

また、http 接続の直前に以下をコードに埋め込もうとしましたが、まだ検出されません。

System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyPort", "8888");

ここで私が実行しているJavaコード。

public String getHttpConnect(User user) {
    HttpClient client=https.getHttpClient();
    InputStream instream=null;
    HttpEntity entity=null;
    HttpGet get = https.getHttp(user);
    try {
            response = client.execute(get);
            entity = response.getEntity();
        if (entity != null) {
             instream = entity.getContent();
             Document document= read.read(instream);
            Element root = document.getRootElement();
            String content = root.elementText("permission");
            if (content.equals("OK")) {
                message = Global.CONNECT_SUCCESS;
            } else {
                message = ErrorMsg.CONNECT_FAIL;
            }
        }

    }catch (Exception e) {
        message = ErrorMsg.CONNECT_EXCEPTION;
        get.abort();
        log.error("HttpConnect error: "+e.toString());
    }finally{
        try {
            if(instream!=null)instream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("Inputstream exception "+e.toString());
            log.error("Inputstream close exception: "+e.toString());
            e.printStackTrace();
            message = ErrorMsg.CONNECT_EXCEPTION;
        }
        client.getConnectionManager().shutdown();
    }
        return message;
}

public HttpClient getHttpClient() {
    HttpClient client = new DefaultHttpClient();
    client = WebClientDevWrapper.wrapClient(client);
    client.getParams().setParameter(
            CoreConnectionPNames.CONNECTION_TIMEOUT,
            Global.CONNECTION_TIMEOUT);// connect timeout 
    client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
            Global.RESPONSE_TIMEOUT);// send data read timeout 
    return client;
}

public HttpGet getHttp(User user) {
    String psw = user.getAccountpsw();
    StringBuffer connectUrl = new StringBuffer();
    if (Global.CURRENT_RUN_TYPE.equals(Global.BETA)) {
        connectUrl.append(Global.DEFAULT_LOGIN_URL_BETA);
    } else {
        connectUrl.append(Global.DEFAULT_LOGIN_URL_LIVE);
    }
    connectUrl.append("?usr=");
    connectUrl.append(user.getAccountname());
    connectUrl.append("&pwd=");
    connectUrl.append(psw);
    connectUrl.append("&vers=2.5.20&");
    connectUrl.append(random());
    // connectUrl.append("&SkipCheckForFiles=TRUE");
    StringBuffer logConnect = new StringBuffer();
    logConnect.append("Logging into server using URL:");
    logConnect.append(Global.LOG_NEWLINE);
    logConnect.append(Global.DES.getLogEncString(connectUrl.toString()));
    logConnect.append(Global.LOG_NEWLINE);
    log.info(logConnect);
    HttpGet get = new HttpGet(connectUrl.toString());
    return get;
}

結果にかかわらず、ご協力いただきありがとうございました。

4

2 に答える 2

1

これを試して:

     HttpHost proxy = new HttpHost("localhost", 8888);
     CloseableHttpClient client = HttpClients.custom().setProxy(proxy).build();
     HttpGet get_request = new HttpGet(url);

     HttpResponse r = client.execute(get_request);
     String Document = EntityUtils.toString(r.getEntity())
于 2014-12-05T23:05:25.800 に答える
0

この種のことが失敗したり、セットアップが難しい場合にできることは、リバース プロキシ モードで Fiddler をセットアップすることです。

基本的に、あなたがすることはあなたのJavaコードで、特定のポートであなたのローカルボックス上のいくつかの構成されたURLにhttpを取得します. 次に、Fiddler で、次のような OnBeforeRequest メソッド内に追加された単純な Fiddler スクリプトを使用できます。

//PROXY to different server example
if(oSession.HostnameIs("http://localhost:8989/path/to/whatever/")){
     oSession.hostname = "http://real/path/to/whatever/on/the/internet";    
}

リバース プロキシ モードで Fiddler をセットアップする方法の詳細については、http: //fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxyを参照してください。

これにより、同じことが効果的に達成され、すべてのトラフィックを表示できるようになります。唯一の欠点は、この問題をトラブルシューティングするために Java コードを一時的に変更する必要があることです。このメソッドは、Java、.net、php などの任意のプラットフォームでも機能します。これは、Fiddler を介してアプリケーション ネットワーク リクエストを強制し、リダイレクトするだけだからです。

これがお役に立てば幸いです。

于 2013-08-02T16:47:35.700 に答える