fys*_*sob 16 java cookies forum get http
我想用cookies手动GET以下载和解析网页.我需要提取安全令牌,以便在论坛上发帖.我已完成登录,已阅读响应并提取了cookie(3对(名称,值)).然后我写了包含这样的cookie的String:
CookieString="name1=value1; name2=value2; name3=value3"
Run Code Online (Sandbox Code Playgroud)
然后我做以下事情
HttpURLConnection connection
connection = (HttpURLConnection)(new URL(Link).openConnection());
connection.setRequestMethod("GET");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Cookie", CookieString );
connection.connect();
Run Code Online (Sandbox Code Playgroud)
然后我阅读了该页面,但它显示我没有登录论坛.我究竟做错了什么?
编辑:我知道如果我想发帖,我必须提取安全令牌.我的思路是,为了提取它,我需要获取这个特定的页面.但是为了将安全令牌作为隐藏字段,我必须在线,因此我需要cookie.但是,当我获取页面并设置上面提到的cookie时,我将该页面作为访客,它表明我不在线,安全令牌的值是guest,这对我没用.我会检查你给我的链接,希望能找到解决方案.
Bal*_*usC 15
当然,您应该从响应的Set-Cookie
标题中收集cookie .要在后续请求中将它们发回,您应该使用逐个设置它们URLConnection#addRequestProperty()
.
基本上:
// ...
// Grab Set-Cookie headers:
List<String> cookies = connection.getHeaderFields().get("Set-Cookie");
// ...
// Send them back in subsequent requests:
for (String cookie : cookies) {
connection.addRequestProperty("Cookie", cookie.split(";", 2)[0]);
}
// ...
Run Code Online (Sandbox Code Playgroud)
该split(";", 2)
是有摆脱它们是无关的服务器端如cookie的属性expires
,path
等等.
为了更方便的HTTP客户端,我建议看一下Apache HttpComponents Client.它可以更透明地处理所有cookie的内容.
更新:根据评论,这不是cookie问题.错误的请求令牌意味着服务器内置了CSRF/bot预防(以防止像您这样的人).您需要使用表单从请求的页面中提取令牌作为隐藏的输入字段,并将其重新发送为请求参数.Jsoup可能对提取所有(隐藏)输入字段很有用.不要忘记传递按钮的名称 - 值对,您要以编程方式"按".另请参阅上述链接以获取更多提示.
在将来,你应该更清楚你检索到的确切错误,而不是在野外猜测.Copypaste确切的错误消息等.
假设cookie值不是硬编码的,而是从先前的请求获得的,那么使用CookieHandler
该类可能最容易.
CookieHandler.setDefault(new CookieManager());
Run Code Online (Sandbox Code Playgroud)
然后,您HttpURLConnection
将自动保存收到的任何Cookie,并将下一个请求发送回同一主机.
归档时间: |
|
查看次数: |
45266 次 |
最近记录: |