如何从 POST 请求中检索 cookie?

Posted

技术标签:

【中文标题】如何从 POST 请求中检索 cookie?【英文标题】:How can I retrieve the cookies from a POST request? 【发布时间】:2012-04-28 15:30:23 【问题描述】:

我可以使用org.apache.http.clien.HttpClient 发送 POST 请求并获得 HTTP 响应。但是登录时我没有得到 html 内容,因为我的 php 脚本需要一个 cookie。那么,如何读取 POST 请求响应的 cookie 并在 POST 请求后使用 GET 请求将其发送回来?

    HttpClient httpClient = new DefaultHttpClient();

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("username", "user"));  
    nameValuePairs.add(new BasicNameValuePair("password", "passwd"));  

    HttpPost httpPost = new HttpPost("http://localhost/index.php");
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    HttpResponse httpResponse = httpClient.execute(httpPost);

    BufferedInputStream bis = new BufferedInputStream(httpResponse.getEntity().getContent()); // Just gets the HTML content, not the cookies

【问题讨论】:

【参考方案1】:

cookies 是标准标头,因此您可以从

获取它
 httpResponse.getHeader("Cookie")

如果您从同一个应用程序调用服务器,则可以让 httpclient 保持 cookie 状态。不要每次都创建一个新实例,它应该可以工作。

【讨论】:

String cookie = httpResponse.getFirstHeader("Cookie").getValue(); 如果您需要解码服务器发送的 cookie,它是 httpResponse.getHeaders("Set-Cookie")【参考方案2】:

如果您使用相同的 HTTPClient 实例并且您的服务器正在发送正确的标头,则应该自动处理。

见http://hc.apache.org/httpclient-3.x/cookies.html

【讨论】:

以上是关于如何从 POST 请求中检索 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

当 POST 是唯一方法时,如何使用 jQuery 从标头中检索 csrf 令牌?

如何使用 Python 登录网页并检索 cookie 以供以后使用?

Mock5 moco框架中post请求如何加入cookies

如何从响应改造中检索 cookie,okhttp?

Django Channels 从 HTTP 握手请求(升级请求)中检索 cookie

如何获取 cookie 并将它们用于其他请求,如 POST ( iOS )?