Java HttpClient警告:Cookie被拒绝:非法的域属性
我使用的是HttpClient的最新版本(4.x)。现在我正试着做一个GET请求。 我刚刚发布了一个Get请求 这是我的密码Java HttpClient警告:Cookie被拒绝:非法的域属性,java,cookies,warnings,httpclient,Java,Cookies,Warnings,Httpclient,我使用的是HttpClient的最新版本(4.x)。现在我正试着做一个GET请求。 我刚刚发布了一个Get请求 这是我的密码 public class Poster { static boolean routing1 = true, routing2 = true; static int counter1 = 0, counter2 = 0; DefaultHttpClient oHtp = null; HttpGet oHGet = null; Htt
public class Poster {
static boolean routing1 = true, routing2 = true;
static int counter1 = 0, counter2 = 0;
DefaultHttpClient oHtp = null;
HttpGet oHGet = null;
HttpResponse oHRes = null;
private void test(String fullAddress) throws Exception {
oHtp = new DefaultHttpClient();
oHGet = new HttpGet(fullAddress);
HttpResponse response = oHtp.execute(oHGet);
System.out.print(response.getStatusLine());
HttpEntity entity = response.getEntity();
if (entity != null) {
entity = new BufferedHttpEntity(entity);
// System.out.println(EntityUtils.toString(entity));
System.out.print("\t entity is retrieved... ");
}
oHtp.getConnectionManager().shutdown();
}
}
我只是很好地执行它。
首先是
new Poster().test("http://123.xl.co.id/profile.php");
其次是
new Poster().test("http://goklik.co.id/");
是的,只有第二个。。。。我从错误消息中得到了这个消息
2011年9月18日上午10:11:30
org.apache.http.client.protocol.ResponseProcessCookies processCookies
警告:Cookie被拒绝:“[版本:0][名称:CookiePst][值:
0149=xwghf7hydhq84isp/eSy9vu+Xq6cT12wxg1A==][域:
.mcore.com][path://][有效期:2011年9月18日星期日10:38:59]。非法的
域属性“mcore.com”。原产地:“goklik.co.id”
我意识到这里牵涉到饼干。但我不明白这个警告是什么意思。我也不知道如何解决这个问题(Cookie没有被拒绝)。希望有一点阳光能让我从你们身上清醒过来你不能“修复”它。该站点正在尝试设置一个不允许设置的cookie,而您正在使用的apache客户端库正在告诉您这一点
当域为
goklik.co.id
时,它试图为mcore.com
设置cookie,可能为时已晚,但我也遇到了同样的问题,我发现了一些帮助我解决问题的方法,只需将浏览器设置为Compability:
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
CookiePolicy.BROWSER_COMPATIBILITY);
以下是可能的值:
cookie策略提供相应的cookie管理
对于给定类型或版本的cookie
默认情况下使用RFC 2109规范。其他支持
可以在适当时选择规格,也可以在适当时设置默认规格
渴望的
提供以下规格:
:与常见的cookie管理实践兼容(即使它们不是100%符合标准)BROWSER\u兼容性
:符合NETSCAPE cookie草稿NETSCAPE
:符合RFC2109(默认)RFC_2109
:不要自动处理COOKIES忽略COOKIES
在
httpclient
4.3之前,在同一页面中是很酷的
但是由于httpclient
4.3,API似乎改变了很多,下面的代码可以工作:
RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY).build();
HttpClientBuilder customizedClientBuilder = HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig);
CloseableHttpClient client = customizedClientBuilder.build(); // customized client,
我使用的是http客户端4.5.2,这是一个cookie规范,可以轻松解决我的问题。如何实例化客户端的示例:
httpClient = HttpClients.custom()
.setDefaultRequestConfig(RequestConfig.custom()
// Waiting for a connection from connection manager
.setConnectionRequestTimeout(10000)
// Waiting for connection to establish
.setConnectTimeout(5000)
.setExpectContinueEnabled(false)
// Waiting for data
.setSocketTimeout(5000)
.setCookieSpec("easy")
.build())
.setMaxConnPerRoute(20)
.setMaxConnTotal(100)
.build();
我只是想改进Eric的答案,因为它并不能直接解决我的问题,但是改变CookieSpecs来忽略COOKIES解决了我的问题
RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
HttpClientBuilder customizedClientBuilder =
HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig);
CloseableHttpClient client = customizedClientBuilder.build(); // customized client,
因为在我的HttpClient 4.5 CookieSpecs.BROWSER版本中,兼容性已经降低了。以下是抑制v4.5.x中警告的最简单方法(4.5.6现在):
如果您不需要处理cookie,只需使用
org.apache.http.impl.cookie.IgnoreSpecProvider
或org.apache.http.impl.cookie.IgnoreSpec
禁用它,具体取决于您使用的API。在HttpClientBuilder
上调用disableCookieManagement()
是不够的hah??你确定吗??天啊。我想,从客户端(我这边)开始,我应该在发出另一个GET请求(传递cookie)之前重新创建我的cookie,该请求使用mcore.com而不是所需的goklik.co.id:(您使用的客户端符合适当的标准。查看org.apache.http.client
的JavaDocs,我看不到覆盖该请求的方法(可用的org.apache.http.client.params.CookiePolicy选项都符合标准)。我遇到了相同的问题,但我向同一个站点发送了请求。你说“该站点正在尝试设置一个不允许设置的cookie”是什么意思?这是为什么?在我的情况下(同一个站点),我真的没有办法解决这个问题吗?我也有同样的问题,但因为我对Cookie不感兴趣,所以我设置了CookiePolicy.IGNORE_Cookie,这为我做到了(与浏览器_兼容,我一直收到消息).这条消息意味着什么?CookiePolicy.BROWSER_兼容性意味着什么?Jonathan Silva的回答-用户可能已经更改了他们的名字(我想是Jon Cardoso),因此链接可能比通过name@törzsmókus谢谢,我已经按照建议更新了答案。
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.disableCookieManagement();
HttpClient httpClient = clientBuilder.build();