我正在尝试编写一个post方法,将一个键/值对发布到另一个服务器并捕获响应。出于安全原因,键/值对是一个简单的帖子。 响应以XML形式返回 - 理想情况下,我希望它也映射到一个对象。
这是我到目前为止所做的事情:
首先,我检查了它是否可以使用简单的表单:
<form action="https://somesite.com/feed" method="post">
<input type="hidden" name="key" value="value" />
<input type="submit">
</form>
这成功地返回了我期待的XML。
然后我尝试在代码中执行此操作:
HttpClient client = new HttpClient();
BufferedReader br = null;
PostMethod method = new PostMethod("https://somesite.com/feed");
method.addParameter("key", "value");
try {
int returnCode = client.executeMethod(method);
br = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));
String readLine;
while (((readLine = br.readLine()) != null)) {
System.err.println(readLine);
}
StringWriter stringWriter = new StringWriter();
IOUtils.copy(method.getResponseBodyAsStream(), stringWriter);
System.out.println(stringWriter.toString());
} catch (Exception e) {
// TODO: handle exception
} finally {
method.releaseConnection();
if(br != null) try { br.close(); } catch (Exception fe) {}
}
在client.executeMethod上,我遇到了一个ConnectException:Connection超时。
您可以给予任何建议。非常感谢。
使用不同的域http和https是否有任何问题 - 即如果我从http页面或https页面调用此帖子方法?
感谢。
答案 0 :(得分:0)
添加编码:
new InputStreamReader(method.getResponseBodyAsStream(), "windows-1252")
在br.close()
之前 method.releaseConnection()
来自已结束流的IOUtils.copy
份副本。要么不使用它,要么更好地使用它而不是你自己的读循环。
在br.close()或等效之后,使用stringWriter,因为所有都被刷新。