我是编写网络代码的新手,并不熟悉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();
现在有效。 (删除此行将失败)。任何人都可以解释原因吗?