Java 来自应用程序引擎终结点的HttpRequest。连接重置

Java 来自应用程序引擎终结点的HttpRequest。连接重置,java,http,inputstream,outputstream,Java,Http,Inputstream,Outputstream,我正在尝试从应用程序引擎端点发送HTTP请求,通过对Postman的实验,我知道结果非常大,请求通常需要大约一分钟 这是我的密码: void testRequest() { String test = getConnectionString(); URL url = new URL(YARDI_URL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connect

我正在尝试从应用程序引擎端点发送HTTP请求,通过对Postman的实验,我知道结果非常大,请求通常需要大约一分钟

这是我的密码:

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();
}
我有两个错误

第一个是:java.net.ProtocolException:读取输入后无法写入输出。

很长一段时间后,我收到一条java.net.SocketException:Connection reset消息

很明显,我对这些数据流以及发送它们的方式处理不当。

我强烈建议使用ApacheHTTPAPI构建

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
}
注意:我建议查看connectTimeout、socketTimeOut和connectionRequestTimeout方法的javadocs