我正在使用HttpURLConnection使用Web服务,这需要60秒才能返回响应,但是当我使用CURL(命令行)进行相同参数的相同操作时,返回响应只需要20 - 25秒。
通过HttpURLConnection调用API服务可能会出现什么问题,因为它需要更长的时间才能返回响应。
HttpURLConnection API调用代码:
`
url = new URL(this._serviceURL);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
connection.setRequestProperty("Accept", "application/xml;");
connection.setRequestProperty("SOAPAction", "http://www.xxtest.com/Request");
connection.setDoInput(true);
connection.setDoOutput(true);
// Send request
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(xmlRequest);
wr.flush();
wr.close();
// Get Response
responseCode = connection.getResponseCode();
String xmlResponse = "";
if (responseCode == HttpURLConnection.HTTP_OK) { // success
is = connection.getInputStream();
xmlResponse = IOUtils.toString(is);
// Decode base64 and Decompress
final GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(Base64.decodeBase64(xmlResponse.getBytes())));
xmlResponse = IOUtils.toString(gzipInputStream);
}`
CURL命令:
curl -XPOST -H "Content-type: text/xml" -H "SOAPAction: http://www.xxtest.com/Request" -H "Accept: application/xml;" -d @request_soap.xml 'http://www.xxtest.com/xmlservices.asmx' > response.xml
更新 上面提到的HttpURLConnection API调用java代码 - 当从Web应用程序(Tomcat)执行时,它需要更长的时间(60秒)来返回响应但是当我在同一服务器上运行与独立java程序相同的java代码时它在20秒内返回响应。完全相同的代码。现在,我不明白为什么相同的代码在从Web应用程序执行时需要更长的时间。
答案 0 :(得分:1)
此时可能存在性能问题
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(xmlRequest);
wr.close();
我猜以下会有更好的表现。
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
out.write(xmlRequest);
out.close();
答案 1 :(得分:1)
我在HttpURLConnection API调用代码(在我的问题中提到)中的openConnection方法中添加了Proxy.NO_PROXY,并解决了延迟响应问题。我正在使用的服务是代理设置,因此我面临延迟响应问题。 请检查下面提到的代码段。
connection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);