簡體   English   中英

Post Request適用於curl,但不適用於使用HttpsURLConnection的Java

[英]Post Request works with curl but not in java using HttpsURLConnection

我正在嘗試用我的帳戶憑據登錄到網站並發布請求。 當我使用curl來執行我的發布請求時,一切正常,但是當我嘗試使用HttpURLConnection在Java中實現它時,它就沒有效果。

當我發送帶有Content-Type: application/x-www-form-urlencoded的帖子請求時Content-Type: application/x-www-form-urlencoded作為標題,而username=USERNAME&password=PASSWORD作為我的有效載荷到https://******.de/login/index.php響應包含一個Set-Cookie: Session=sodfsgpc0uefhn4sdfucnau2; path=/ Set-Cookie: Session=sodfsgpc0uefhn4sdfucnau2; path=/

如果我現在使用此會話ID並將其設置為cookie以對我進行身份驗證,則它將與curl請求的會話ID一起使用,而不與Java請求一起使用。

網址

curl -v -H "Content-Type: application/x-www-form-urlencoded" --data "username=USERNAME&password=PASSWORD" https://******.de/login/index.php

Java的

String loginData = "username=USERNAME&password=PASSWORD";
URL url = new URL(LOGIN_URL);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

connection.setRequestMethod("POST");
connection.addRequestProperty("Accept", "*/*");
connection.addRequestProperty("Host", "******.de");
connection.addRequestProperty("Content-Length", String.valueOf(loginData.length));
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("User-Agent", "curl/7.55.1");

connection.setDoOutput(true);
OutputStream out = connection.getOutputStream();
out.write(loginData);
out.flush();
out.close();

connection.getInputStream().close();

System.out.println(connection.getHeaderField("Set-Cookie").split(";")[0]);

如您所見,我嘗試使用curl使用的相同標頭,但即使如此,它似乎也不起作用。

經過更多工作后,我發現login.php網站將請求重定向到另一個頁面,如果您不使用login.php返回的會話ID進行請求,則該頁面會使您的會話ID無效。

因此,調用connection.setFollowRedirects(false); 為我修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM