curl命令行vs HttpURLConnection API服务调用响应时间差异

时间:2015-12-16 10:31:15

标签: java performance web-services curl httpconnection

我正在使用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应用程序执行时需要更长的时间。

2 个答案:

答案 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);