J'utilise la dernière version de HttpClient (4.x). Et en ce moment, j'essaie de faire une demande GET. Je viens de poster une demande Get.
Ceci est mon code;
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();
}
}
Je l'exécute bien. Le premier est
new Poster().test("http://123.xl.co.id/profile.php");
et le deuxième est
new Poster().test("http://goklik.co.id/");
ya, et seulement le deuxième .... J'ai reçu ceci Le message d'erreur;
18 sept. 2011 10:11:30 org.Apache.http.client.protocol.ResponseProcessCookies processCookies AVERTISSEMENT: cookie rejeté: "[version: 0] [nom: CookiePst] [valeur: 0149 = xwGHF7HYDHLHQ84Isp/eSy9vu + Xq6cT12wxg1A = ] [domaine: .mcore.com] [chemin: /] [expiration: dim. 18 sept. 10:38:59 ICT 2011] ". Attribut de domaine illégal" mcore.com ". Domaine de Origine: "goklik.co.id"
J'ai réalisé que le cookie est impliqué ici. Mais je ne comprends pas ce que signifie l'avertissement. Et je ne sais pas non plus comment le résoudre (le cookie n'est pas rejeté). J'espère qu'il y a un peu de lumière pour vous éclairer les gars ....: D
Vous ne pouvez pas le "réparer". Le site essaie de définir un cookie qu'il n'est pas autorisé à définir et la bibliothèque cliente Apache que vous utilisez vous en informe.
Il essaie de définir un cookie pour mcore.com
lorsque le domaine est goklik.co.id
C'est peut-être trop tard, mais j'ai eu le même problème et j'ai trouvé quelque chose qui m'a aidé à le résoudre, il suffit de définir Cookie Policy sur la compatibilité du navigateur:
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
CookiePolicy.BROWSER_COMPATIBILITY);
Voici les valeurs possibles:
La politique en matière de cookies fournit une interface de gestion des cookies correspondante pour un type ou une version donné de cookie.
La spécification RFC 2109 est utilisée par défaut. D'autres spécifications prises en charge peuvent être choisies le cas échéant ou définies par défaut si vous le souhaitez
Les spécifications suivantes sont fournies:
BROWSER_COMPATIBILITY
: compatible avec les pratiques courantes de gestion des cookies (même si elles ne sont pas 100% conformes aux normes)NETSCAPE
: compatible avec le projet de cookie NetscapeRFC_2109
: Conforme à RFC2109 (par défaut)IGNORE_COOKIES
: ne traite pas automatiquement les cookies
Avant httpclient
4.3, cette réponse dans la même page est cool.
Mais puisque httpclient
4.3, l'API semble avoir beaucoup changé, le code suivant fonctionnerait:
RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY).build();
HttpClientBuilder customizedClientBuilder = HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig);
CloseableHttpClient client = customizedClientBuilder.build(); // customized client,
J'utilise http client 4.5.2 et ce paramètre de cookie est réglé pour résoudre facilement mon problème. L'exemple de la façon d'instancier un client:
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();
Voici le moyen le plus simple de supprimer l'avertissement dans v4.5.x (4.5.6 en ce moment):
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.disableCookieManagement();
HttpClient httpClient = clientBuilder.build();
Je veux juste améliorer la réponse d'Eric, car cela ne résout pas directement mon scénario, mais changer CookieSpecs en IGNORE_COOKIES résout mon problème.
RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
HttpClientBuilder customizedClientBuilder =
HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig);
CloseableHttpClient client = customizedClientBuilder.build(); // customized client,
Parce que dans ma version de HttpClient 4.5 CookieSpecs.BROWSER_COMPATIBILITY est déjà déprécié.
Si vous n'avez pas besoin de traiter les cookies, vous pouvez simplement le désactiver, avec org.Apache.http.impl.cookie.IgnoreSpecProvider
Ou org.Apache.http.impl.cookie.IgnoreSpec
Selon l'API que vous utilisez. Appeler disableCookieManagement()
sur HttpClientBuilder
ne suffit pas