繁体   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