我有一个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代码中?
有人可以帮忙吗?我做错了吗?