Почему HttpClient не отправляет мой Cookie? - PullRequest
4 голосов
/ 15 мая 2011

Я использую Apache HttpClient 4 в Java.
Почему HttpClient не отправляет Cookie, установленный в ответ на запрос на post1?

public static void goDoIt() throws ClientProtocolException, IOException {

    HttpClient client = new DefaultHttpClient();
    //for use with Fiddler2
    HttpHost proxy = new HttpHost("127.0.0.1", 8888);
    client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
    //stores all cookies automatically (should sent them too(?))
    CookieStore cookieStore = new BasicCookieStore();
    HttpContext localContext = new BasicHttpContext();
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

    HttpGet request = new HttpGet("http://www.websitename.de");
    request.addHeader("Host", "hosthost.de");
    request.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1");

    //required to fetch Cookie 1, stored automatically
    HttpResponse response1 = client.execute(request, localContext);
    request.abort();

    // parameters and headers
    List<NameValuePair> parameters1 = new ArrayList<NameValuePair>();
    parameters1.add(new BasicNameValuePair("username", "karl"));
    parameters1.add(new BasicNameValuePair("age", "23"));
    parameters1.add(new BasicNameValuePair("button","button"));

    HttpPost post1 = new HttpPost("http://websitename.de/Default.aspx");

    post1.addHeader("Host","hosthost.de");
    post1.addHeader("User-Agent",
            "Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1");
    post1.addHeader("Referer","http://websitename.de/Default.aspx");

    UrlEncodedFormEntity entity1 = new UrlEncodedFormEntity(parameters1);
    post1.setEntity(entity1);


    // execute and print
    HttpResponse response2 = client.execute(post1,localContext);
    HttpEntity entity2 = response2.getEntity(); //fiddler doesn't show that the cookie is being sent !

    System.out.println(EntityUtils.toString(entity2));
}

Я использовал Fiddler2 для просмотра трафика, и когда я сравниваю сообщение из моего кода с сообщением из Firefox, я не вижу никаких отличий, за исключением того, что мой код не отправляет cookie.

Ответы [ 2 ]

7 голосов
/ 15 мая 2011

Поскольку вы получаете файл cookie от http://www.websitename.de,, но попробуйте открыть http://websitename.de позже. Это не одно и то же имя хоста.

2 голосов
/ 15 мая 2011

@ Йохен определил вероятную причину.Это фундаментальное поведение файлов cookie HTTP.По умолчанию файлы cookie отправляются только на сайт, который их устанавливает ... в целях безопасности и конфиденциальности.

Если вы хотите обойти это, вам следует выполнить одно из следующих действий:

  • Убедитесь, что URL-адрес хоста и порт совпадают.
  • Получите на веб-сервере файл cookie с атрибутом домена «.websitename.de».Однако это имеет существенные последствия для безопасности в том смысле, что cookie-файлы будут отправляться с запросами на все дочерние домены "websitename.de" ... для других пользователей, получающих доступ к сайту через обычные веб-браузеры.
  • Создайте / настройте CookieStore, который будет игнорировать обычные правила, а также отправьте cookie на «www.websitename.de».(Предположительно, вы знаете, что делаете, и это не представляет угрозы для безопасности ...)
...