簡體   English   中英

在 java 中發送帶有 payload 的 post 請求

[英]Sending a post request with payload in java

我需要獲取文件的內容,這是我在 .network 選項卡下使用 chrome 檢查器找到的。 為此,我想向請求 URL 發送一個帶有所需負載的 post 請求。由於我使用 Selenium ChromeDriver 導航和登錄頁面,我首先嘗試使用 Selenium 提供的 HtmlRequest class。但我被卡住了幾秒鍾后,當我不知道如何傳遞有效負載或如何執行請求時,我最終會完成。 由於我無法找到這個 class 的正確解釋或示例,所以除了以下代碼之外,我沒有得到任何進一步的信息:

HttpRequest xhr = new HttpRequest(HttpMethod.POST, "https://flow.polar.com/api/training/history");
xhr.setContent(?);

接下來,我嘗試使用來自 java.net.http 的 HttpClient class。 我找到了以下示例並將 URL 更改為 chrome 檢查員向我顯示的請求 URL。

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://flow.polar.com/api/training/history")).build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();

這返回了一個 html 站點,它只是告訴我,找不到我輸入的帶有 URL 的站點。

然后我嘗試使用 Selenium 的 JavascriptExecutor 和以下代碼:

JavascriptExecutor js = (JavascriptExecutor) driver;
System.out.println(js.executeScript("var xhr = new XMLHttpRequest();\r\n" + 
        "xhr.open('POST', 'https://flow.polar.com/api/training/history', false);\r\n" + 
        "xhr.setRequestHeader('XHR', 'application/x-www-form-urlencoded');\r\n" + 
        "\r\n" + 
        "xhr.send('login=test&password=test');\r\n" + 
        "return xhr.response;", (Object) null));

這將返回 html 代碼,顯示以下網站: 網站

如果能得到答案,那真是太好了,因為我花了太多時間試圖找出一種方法來做到這一點(對上面的代碼示例進行了多次迭代嘗試,但是它們產生了相同或更差的結果)。

以下是通緝文件的 chrome 檢查器的屏幕截圖: chromeInspector1

chromeInspector2

錯誤說明了一切。 403表示您無權POST 這意味着,您正試圖在沒有Authorization的情況下創建資源。

在此處輸入圖像描述

您需要生成授權令牌並將其用於您的POST請求。

請參考Java中的Http Basic Authentication using HttpClient?

暫無
暫無

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

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