java - 编辑:如何发送带有参数和表单数据的帖子请求,如 JAVA 中的邮递员截图?
问题描述
我正在尝试发送一个 POST 请求来获取评论,但它在 Java 中不起作用,而它与邮递员一起使用。
我收到一个 403 Forbidden 错误,但在邮递员上它检索到我需要的数据就好了..
这是我试图用来复制行为的 Java 代码。
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;
解决方案
似乎您的问题就在这里(请参阅内联评论):
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.
urlParameters
打开 URL 时,您必须将其直接附加到 URL- 然后你必须像你一样将你的表单数据写入正文:
conn.getOutputStream().write(postDataBytes);
- 然后关闭输出流
推荐阅读
- c# - Entity Framework 6 添加了带下划线的额外外键
- vba - VBA Word:Property Revision.Style 不起作用
- azure - 在哪里可以找到 Azure 函数的代码?
- android - 右键单击 res 文件夹时没有“android 资源目录”选项
- generics - 我可以有可选的特征界限吗?
- google-chrome - 忘记特定域的客户端证书设置 (Chrome)
- r - R中符号和文本之间的图例中的空格
- python-3.x - 我们可以在同一个程序中有两个 pyfirmata 迭代器吗?
- java - org.xml.sax.SAXParseException;1 字节 UTF-8 序列的无效字节 1
- python - sqlalchemy filter_by() 又多了一个参数