java - 如何从 HttpURLConnection [Java 11] 中检索 cookie
问题描述
我需要在向服务器发出 POST 请求(成功登录请求)后检索 cookie 集。
在 Postman 中,我可以看到响应标头以及响应 cookie。在我的代码中,我可以获得相同的响应标头,但我不确定如何获取我需要的 cookie。
这是我的代码:
public void sendPost(String url, String postParams) throws Exception {
URL obj = new URL(url);
conn = (HttpURLConnection) obj.openConnection();
// Acts like a browser
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("User-Agent", "Mozilla/5.0"); // mock a web browser
conn.setRequestProperty(
"Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
for (String cookie : this.cookies) {
conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
}
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Referer", "https://accounts.google.com/ServiceLoginAuth");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", Integer.toString(postParams.length()));
conn.setDoOutput(true);
conn.setDoInput(true);
// Send post request
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(postParams);
wr.flush();
wr.close();
Map<String, List<String>> headerFields = conn.getHeaderFields();
// !!!! got header files -> now try to get cookies some way !!!
List<String> cookies = headerFields.get("Set-Cookie"); // ---> null
int responseCode = conn.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + postParams);
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
}
该方法工作正常,并且每次都像 Postman 那样获取预期的标题:
如何从我的 Java 方法中获取“Cookie 值”?
解决方案
推荐阅读
- android - Intellij 安卓项目。摇篮 5.2.1。原因:java.util.ConcurrentModificationException
- sql-server - 在 SQL 语句中将 NULL 作为参数传递时,如何调整 WHERE 子句以选择所有没有 Premium = 0 的记录
- r - 如果函数工厂的输出依赖于输入而不是其参数,我该如何将其放入 R 包中?
- javascript - 使用 kafka 消费者的数据库操作或 http 调用
- jquery - jquery按钮不附加
- java - Gradle - 线程“主”java.lang.NoClassDefFoundError 中的异常:org/slf4j/LoggerFactory
- ios - 使用分段控制器重叠 UIView 问题
- unit-testing - NSubstitute:无法模拟与没有相应设置器的成员变量关联的语法糖 getter 方法
- c# - 在 C# 中检查两个数组的循环排列
- azure-application-insights - 带有 Application Insights 的 Azure Java Web App 每 5 分钟显示 404