[英]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));
如果能得到答案,那真是太好了,因为我花了太多时间试图找出一种方法来做到这一点(对上面的代码示例进行了多次迭代尝试,但是它们产生了相同或更差的结果)。
错误说明了一切。 403
表示您无权POST
。 这意味着,您正试图在没有Authorization
的情况下创建资源。
您需要生成授权令牌并将其用于您的POST
请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.