Я использую последнюю версию httpClient (4.x). И сейчас я пытаюсь сделать запрос на получение. Я просто публикую запрос на получение.
Это мой код;
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/");
Ya, и только второй .... я получил это сообщение об ошибке;
18, 2011 10:11:30 org.apache.http.client.protocol.ResponseProcesscesscessceblectionscomeceies Предупреждение: Cookie отклонено: «[Версия: 0] [Имя: cookiepst] [Значение: 0149 = xwghf7hydhlhq84isp / eSy9vu + xq6ct12wxg1a ==] [Домен: .mcore.com] [Путь: /] [Истечение: Sun 18 10:38:59 ICT 2011] ». Незаконный Атрибут домена "mcore.com". Домен происхождения: «GoKLik.co.id»
Я понял, что здесь участвует cookie. Но я не понимаю, что означает предупреждение. И я также не знаю, как решить это (печенье не отклонено). Надеюсь, есть немного света, чтобы очистить свой разум от вас, ребята ....: D
Вы не можете это «исправить». Сайт пытается установить cookie, которые он не может установить, и используемая вами клиентская библиотека apache сообщает вам об этом.
Он пытается установить куки для mcore.com
, когда домен goklik.co.id
Вот самый простой способ подавить предупреждение в v4.5.x (прямо сейчас 4.5.6):
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.disableCookieManagement();
HttpClient httpClient = clientBuilder.build();
До httpclient
4.3 ответ Jonathan Silva
был крут.
Но начиная с 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();
Просто хочу улучшить ответ Эрика, так как он не решает мой сценарий напрямую, но изменение 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 уже устарела.
Если Вы не должны обрабатывать cookie, можно просто отключить его, с org.apache.http.impl.cookie.IgnoreSpecProvider
или org.apache.http.impl.cookie.IgnoreSpec
в зависимости от того, что API Вы используете. Вызов disableCookieManagement()
на HttpClientBuilder
недостаточно