[英]How do I get this HTTP/1.1 POST to work in Java using HttpURLConnection?
我試圖使用HttpURLConnection
將HTTP / 1.1 POST發送到http://uploaded.net/io/login ,以便使用我的用戶名和密碼登錄到該網站。
出於某種原因,看起來像byte[] postData
沒有被發送到服務器。
我收到響應代碼和消息200 OK ,但服務器回復JSON格式的錯誤消息{“err”:“請鍵入id和密碼”} ,好像我從未真正發送過數據。
我已經嘗試了不同的方法(發送一個String
, byte[]
等,使用不同的輸出編寫器)發送數據但到目前為止它們都沒有工作,我無法弄清楚它究竟在哪里失敗。
這是我正在使用的代碼片段:
package post;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.Charset;
public class PostTest {
public static void login() throws MalformedURLException, IOException {
String urlParameters = String.format("id=%s&password=%s",
URLEncoder.encode(Config.getProperty("account.1.username"), "UTF-8"),
URLEncoder.encode(Config.getProperty("account.1.password"), "UTF-8")
);
byte[] postData = urlParameters.getBytes(Charset.forName("UTF-8"));
URL url = new URL(Config.getProperty("login.url"));
HttpURLConnection httpConn = (HttpURLConnection)url.openConnection();
httpConn.setDoInput(true);
httpConn.setDoOutput(true);
httpConn.setUseCaches(false);
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Length",
Integer.toString(postData.length));
//prints: 26
System.out.println(postData.length);
//prints: id=test&password=123456789
System.out.println(urlParameters);
httpConn.getOutputStream().write(postData);
httpConn.getOutputStream().flush();
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(httpConn.getInputStream()))) {
for (String line; (line = reader.readLine()) != null;)
System.out.println(line);
}
}
}
實時HTTP標頭 (Firefox插件)輸出:
POST /io/login HTTP/1.1
Host: uploaded.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/javascript, text/html, application/xml, text/xml, */*
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
X-Prototype-Version: 1.6.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://uploaded.net/
Content-Length: 20
Cookie: __utma=9[censored...]
Connection: keep-alive
id=test&pw=123456789
HTTP/1.1 200 OK
[...]
編輯:添加了Firefox的Live HTTP Headers輸出,我用它來查看通過POST發送的數據。
我的假設是byte[] postData
沒有正確發送,如果有的話,對嗎?
我必須進行哪些更改才能使登錄正常工作?
呃,我終於發現了我的錯誤。 因此我嘗試使用我的localhost / test.php進行第一次登錄,其中參數是password=<pw>
我完全忽略了我發送數據的實際網站是使用pw=<pw>
。
更改String.format("id=%s&password=%s", [...]
到String.format("id=%s&pw=%s", [...]
它就像魅力一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.