我正在使用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;
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被拒绝:“[version:0] [name:CookiePst] [value: 0149 = xwGHF7HYDHLHQ84Isp / eSy9vu + Xq6cT12wxg1A ==] [域: .mcore.com] [路径:/] [到期日:太阳9月18日10:38:59 ICT 2011]“。非法 域属性“mcore.com”。原产地:“goklik.co.id”
我意识到这里涉及到Cookie。但我不明白警告意味着什么。我也不知道如何解决它(Cookie没有被拒绝)。 HOpe有一些亮光可以帮助你清除我的想法....:D
答案 0 :(得分:23)
也许为时已晚,但我遇到了同样的问题而且我找到了帮助我解决的问题,只需将Cookie Policy设置为浏览器兼容性:
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
CookiePolicy.BROWSER_COMPATIBILITY);
以下是可能的值:
Cookie策略提供相应的cookie管理interfrace 对于给定类型或版本的cookie。
默认情况下使用RFC 2109规范。其他支持 规范可以在适当的时候选择,也可以在默认时设置 期望的
提供以下规格:
BROWSER_COMPATIBILITY
:与常见的Cookie管理实践兼容(即使它们不符合100%标准)NETSCAPE
:符合Netscape Cookie草案RFC_2109
:符合RFC2109(默认)IGNORE_COOKIES
:不自动处理Cookie
答案 1 :(得分:18)
你无法“修复”它。该网站正在尝试设置一个不允许设置的cookie,而您正在使用的apache客户端库正在告诉您它。
当域名为mcore.com
goklik.co.id
设置Cookie
答案 2 :(得分:1)
我正在使用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();
答案 3 :(得分:0)
只是想改进Eric的答案,因为它没有直接解决我的情况,但将CookieSpecs更改为IGNORE_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_COMPATIBILITY已经折旧。
答案 4 :(得分:0)
在v4.5.x(现在是4.5.6)中,这是抑制警告的最简单方法:
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.disableCookieManagement();
HttpClient httpClient = clientBuilder.build();
答案 5 :(得分:0)
如果您不需要处理Cookie,则可以简单地将其禁用,根据您使用的API,使用org.apache.http.impl.cookie.IgnoreSpecProvider
或org.apache.http.impl.cookie.IgnoreSpec
。仅在disableCookieManagement()
上调用HttpClientBuilder