cURL从POST方法接收响应,但Java代码没有

时间:2014-06-14 07:20:15

标签: java curl apache-commons-httpclient

我有一个cURL脚本执行将xml文件上传到远程服务器的任务,作为响应,接收数据并将其保存到另一个xml文件。

cURL中的脚本就是这样。

curl -d @C:\MyUtility\Request\testRequest.xml -H "Content-Type:text/xml" http://xml.example.com:4000/FilePickup -o C:\MyUtility\Response\testResponse.xml

现在,我正在尝试使用apache的commons-HTTPClient API来实现它。特别是具有groupID commons-httpclient atrifactID commons-httpclient和版本3.1的maven工件。

以下是相同的代码。

public static void generateResponse(File requestFile, String strURL, File responseFile) {
        PostMethod post = new PostMethod(strURL);
        BufferedReader bufferedreader = null;
        try {
            post.setRequestEntity(new InputStreamRequestEntity(new FileInputStream(requestFile), requestFile.length()));
            post.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1");
            HttpClient httpClient = new HttpClient();
            int result = httpClient.executeMethod(post);
            System.out.println(result);

            if (result == HttpStatus.SC_NOT_IMPLEMENTED) {
                System.out.println("Remote location not accessible through POST method.");
                post.getResponseBodyAsString();
            } else if (result == HttpStatus.SC_NOT_ACCEPTABLE) {
                System.out.println("Problem accessing remote location.");
                System.out.println(post.getResponseBodyAsString());
            } else {
                bufferedreader = new BufferedReader(new InputStreamReader(post.getResponseBodyAsStream()));
                StringBuilder sb = new StringBuilder();
                String readLine;
                while (((readLine = bufferedreader.readLine()) != null)) {
                    sb.append(readLine);
                }
                FileOutputStream fos = new FileOutputStream(responseFile);
                fos.write(sb.toString().getBytes());
                fos.close();
                bufferedreader.close();
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            post.releaseConnection();
        }
    }

现在,问题是,当我在同一台机器上使用cURL脚本时,对于同一个文件,会收到响应并生成responseFile.xml。通过Java代码,我得到的响应result仅为501 HttpStatus.SC_NOT_IMPLEMENTED

就我在cURL中的研究而言,-d争论将数据添加到请求中并默认确定请求方法POST,除非提供-G参数以覆盖{{1} }} 方法。所以在我的cURL脚本中,我认为它正在使用GET方法进行请求,并且正在获得响应。为什么不在Java代码中?

有人可以帮忙吗?我做错了吗?

0 个答案:

没有答案