HttpClient添加cookie策略

本文介绍如何在使用HttpClient(commons-httpclient:3.1)时,通过设置Cookie策略来避免Cookie的保存与发送,确保每次HTTP请求相互独立。
问题:
10-30 16:38:05.898: W/HttpMethodBase(14634): Cookie rejected: "$Version="1"; BAIDUID="xxxx"; $Path="/"; $Domain=".baidu.com"". Domain attribute ".baidu.com" violates RFC 2109: host minus domain may not contain any dots

使HttpClient(commons-httpclient:3.1)不保存和发送Cookie,即每次请求都相互独立。


解决:


方法1:客户端(HttpClient)添加cookie策略
httpClient.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES);


方法2:Http方法(HttpMethod)每次创建时添加cookie策略
method.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES);


httpclient 4.x的方法如下:
client.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.IGNORE_COOKIES);


参考:http://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html
### 配置HttpClient以在HTTP请求中包含Cookie 当使用 `HttpClient` 发送带有 Cookie 的 HTTP 请求时,可以通过多种方法实现这一需求。对于 Java 中的 Apache HttpClient 4.x 版本而言,存在两种主要的方式来设置 Cookies。 #### 方法一:利用PersistentCookieStore管理Cookies 这种方法适用于希望持久化存储 Cookies 并自动将其附加到后续请求的情况。创建一个 `PersistentCookieStore` 对象实例并关联至 `HttpClient` 实例: ```java // 创建持久化的Cookie仓库 PersistentCookieStore cookieStore = new PersistentCookieStore(MainActivity.this); ((DefaultHttpClient) httpClient).setCookieStore(cookieStore); // 执行POST请求并将响应返回给调用方 HttpResponse response = httpClient.execute(httpPost); ``` 此代码片段展示了如何初始化 `PersistentCookieStore` 来保存会话期间收到的所有 Cookies,并确保这些 Cookies 能够被未来的请求所重用[^1]。 #### 方法二:手动向请求头添加Cookie字段 如果只需要一次性地为特定请求指定某些 Cookies,则可以直接修改该次请求的消息头部信息。这种方式更加灵活但也更易出错,因为需要开发者自行负责构建正确的 Cookie 字符串格式。 ```csharp var client = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http://example.com/api"); request.Headers.Add("Cookie", "name=value; name2=value2"); // 添加自定义Cookie字符串 await client.SendAsync(request); ``` 上述 C# 示例说明了怎样通过 `Headers.Add()` 函数将预设好的 Cookie 值注入到单个请求之中[^2]。 另外,在Java环境下也可以采用相似的手动方式: ```java HttpPost httpPost = new HttpPost(urlString); BasicHeader header = new BasicHeader("Cookie","your_cookie_string_here"); httpPost.addHeader(header); httpClient.execute(httpPost); ``` 这段代码同样体现了直接往请求对象里加入 Header 参数的方法,从而达到携带特定 Cookies 效果的目的[^3]。 无论采取哪种策略,都应考虑到安全性因素以及目标服务器的具体要求,合理选择适合项目场景的技术方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值