2017-09-27 13 views
0

私はAPP EngineエンドポイントからのHTTPリクエストを送信しようとしています。郵便番号の実験からは結果がかなり大きいことがわかりました。リクエストは通常​​約1分かかります。ここアプリエンジンのエンドポイントからのHttpRequest。接続リセット

は私のコードです:

void testRequest() { 
    String test = getConnectionString(); 
    URL url = new URL(YARDI_URL); 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setDoOutput(true); 
    connection.setInstanceFollowRedirects(false); 
    connection.setRequestMethod("POST"); 
    connection.setRequestProperty("Content-Type", "text/xml"); 
    connection.setConnectTimeout(1000000); 
    OutputStream os = connection.getOutputStream(); 
    PrintWriter p = new PrintWriter(os); 
    p.print(test); 
    p.close(); 

    YardiResponse response = new 
    YardiResponse(connection.getInputStream().toString()); 

    System.out.println(response.getResponse()); 
    connection.disconnect(); 
} 

私は2つのエラーを取得しています、

が最初です:java.net.ProtocolException: Cannot write output after reading input.

と長い時間の後、私はjava.net.SocketException: Connection resetメッセージを取得しています。

明らかに私は蒸気を誤って取り扱っています。

答えて

1

私は、http-requestをapache http apiで作成することをおすすめします。

private static final HttpRequest<String.class> HTTP_REQUEST = 
     HttpRequestBuilder.createPost(YARDI_URL, String.class) 
      .responseDeserializer(ResponseDeserializer.ignorableDeserializer()) 
      .contentTypeOfBody(ContentType.TEXT_XML) 
      .connectTimeout(someIntValue) 
      .socketTimeOut(someIntValue) 
      .connectionRequestTimeout(someIntValue). 
      .build(); 

void testRequest() { 
    ResponseHadler<String> yardiHandler = HTTP_REQUEST.executeWithBody(yourXml); 

    int statusCode = yardiHandler.getStatusCode(); 
    String content = yardiHandler.get(); //returns response body as String in this case 
} 

注:私はconnectTimeoutsocketTimeOutconnectionRequestTimeoutメソッドのJavadocを参照してくださいお勧め。

関連する問題