0

我正在尝试编写一个 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 timed out。

您可以提供的任何建议将不胜感激。

使用不同的域 http 和 https 是否有任何问题 - 即如果我从 http 页面或 https 页面调用此 post 方法?

谢谢。

4

1 回答 1

0

添加编码:

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

br.close()method.releaseConnection()

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

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

于 2013-04-12T15:46:23.887 回答