HttpUrlConnection POST无法按预期工作

时间:2016-02-19 06:27:50

标签: java

我是编写网络代码的新手,并不熟悉Java编程。

我正在尝试编写一个片段来登录网站。我需要使用http POST来提交用户名和密码。

我使用Apache http组件编写了一个版本并且工作正常,我可以看到在使用Wireshark监视连接时有一个HTTP POST。

StringEntity loginForm = new StringEntity(postData);
HttpPost loginPost = new HttpPost(LOG_IN_URL);
loginPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
loginPost.setEntity(loginForm);
client.execute(loginPost);

以上版本有效。

postData

private static String getPostData(String checkCode) {
    String postinfo1 = "operation=&usercode_text=myusername&userpwd_text=password&checkcode_text=";
    String postinfo2 = "&submittype=%C8%B7+%C8%CF";
    String postData = postinfo1 + checkCode + postinfo2;
    return postData;
}

然后我用HttpUrlConnection

写了另一个
URL logInUrl = new URL(LOG_IN_URL);
HttpURLConnection logConn = (HttpURLConnection) logInUrl.openConnection();
logConn.setDoOutput(true);
logConn.setRequestMethod("POST");
logConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
logConn.setChunkedStreamingMode(0);
OutputStream out = logConn.getOutputStream();
BufferedWriter logPost = new BufferedWriter(new OutputStreamWriter(out));
logPost.print(postData);
logPost.close();

执行此块之后,我只能在Wireshark上看到一些TCP包,但在它们之后却看不到HTTP POST(如Apache http组件版本的情况),我无法登录该网站。

我很好奇两个版本的代码可能存在差异,导致后者失败。

更新 我不知道为什么。但是在我添加

之后
logConn.getResponseCode();

现在有效。 (删除此行将失败)。任何人都可以解释原因吗?

0 个答案:

没有答案