将数据POST到另一台服务器并检索值

时间:2013-04-12 15:38:42

标签: java servlets

我正在尝试编写一个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页面调用此帖子方法?

感谢。

1 个答案:

答案 0 :(得分:0)

添加编码:

new InputStreamReader(method.getResponseBodyAsStream(), "windows-1252")
br.close()

之前

method.releaseConnection()

来自已结束流的IOUtils.copy份副本。要么不使用它,要么更好地使用它而不是你自己的读循环。

在br.close()或等效之后,使用stringWriter,因为所有都被刷新。