web-dev-qa-db-fra.com

HttpClient AVERTISSEMENT: cookie rejeté: attribut de domaine illégal

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

22
gumuruh

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

18
Brian Roach

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 Netscape
  • RFC_2109: Conforme à RFC2109 (par défaut)
  • IGNORE_COOKIES: ne traite pas automatiquement les cookies
24
Jon Cardoso

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,
14
Eric Wang

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();
2
Nemanja

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();
1
Tristan

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é.

0
Jin

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

0
ZZ 5