编辑:如何使用参数和表单数据发送此post请求,如JAVA中的postman屏幕截图?
我试图发送一个POST请求来获取评论,但它在Java中不起作用,而在postman中起作用 我得到了一个403禁止的错误,但在《邮差》上它检索到了我需要的数据 下面是我试图用来复制行为的Java代码编辑:如何使用参数和表单数据发送此post请求,如JAVA中的postman屏幕截图?,java,rest,post,request,Java,Rest,Post,Request,我试图发送一个POST请求来获取评论,但它在Java中不起作用,而在postman中起作用 我得到了一个403禁止的错误,但在《邮差》上它检索到了我需要的数据 下面是我试图用来复制行为的Java代码 String targetUrl = YOUTBE_COMMENTS_AJAX_URL; String urlParameters = "action_load_comments=1&order_by_time=True&filter=jBjXVrS8nXs"; St
String targetUrl = YOUTBE_COMMENTS_AJAX_URL;
String urlParameters = "action_load_comments=1&order_by_time=True&filter=jBjXVrS8nXs";
String updatedURL = targetUrl + "?" + urlParameters;
URL url = null;
InputStream stream = null;
HttpURLConnection urlConnection = null;
try {
url = new URL(updatedURL);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("content-type", "multipart/form-data");
urlConnection.setRequestProperty("user-agent", "USER_AGENT");
urlConnection.setDoOutput(true);
String data = URLEncoder.encode("video_id", "UTF-8")
+ "=" + URLEncoder.encode(youtubeId, "UTF-8");
data += "&" + URLEncoder.encode("session_token", "UTF-8") + "="
+ URLEncoder.encode(xsrfToken, "UTF-8");
data += "&" + URLEncoder.encode("page_token", "UTF-8") + "="
+ URLEncoder.encode(pageToken, "UTF-8");
urlConnection.connect();
OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream());
wr.write(data);
wr.flush();
stream = urlConnection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"), 8);
String result = reader.readLine();
return result;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
您的问题似乎就在这里(请参阅内联注释):
- 打开URL时,必须将
直接附加到URLurlParameters
- 然后,您必须像这样将表单数据写入正文:
conn.getOutputStream().write(postDataBytes)代码>
- 然后关闭输出流
会话\u令牌
或页面\u令牌
的值。它也可以是用户代理的价值。在上次更新中:您确定video_id和session_token都是相同的吗?祝你好运…哎呀。。。很好地理解了价值观,但我还是得到了同样的问题。奇怪的是,它通过邮递员与同一个用户代理,我打印,以确保会话令牌正确出来。这和我喂邮递员一样。我又一次更新了这篇文章,上面有一张邮递员准确发送的照片。
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(urlParameters);
// you wrote your URL parameters into Body
wr.flush();
wr.close();
//You closed your body and told server - you are done with request
conn.getOutputStream().write(postDataBytes);
// you wrote data into closed stream - server does not care about it anymore.