2010-09-03 3 views
1

Я хочу создать небольшое приложение java для копирования содержимого вики с одного сервера на другой. API - based on the XML-RPC.httpclient - использовать файлы cookie с сообщением POST

В основном у меня есть три метода: login, getPage и putPage. Я использую Apache HttpClient 3.x и сумел использовать login для успешного входа в систему и getPage, чтобы получить страницу из старой wiki правильно.

Аутентификация обрабатывается с помощью куки-файлов: я вхожу в новую вики и некоторые файлы cookie устанавливаются на соответствующий httpclient. Доку говорит мне, что одно из этих файлов cookie используется для аутентификации.

Затем я выполняю putPage с другим методом POST на том же httpclient, и сервер отвечает сообщением об ошибке аутентификации.

код последовательность выглядит следующим образом (очень сниженный):

HttpClient client = new HttpClient(); 
PostMethod postLogin = createNewPostMethod("login", "user", "pw"); 
client.executeMethod(postLogin); 
// Now I'm logged in and the client definitly has stored the cookies 
PostMethod postPutPage = createNewPostMethod("putPage", getPage()); 
client.executeMethod(postPutPage); // the server won't let me put the page 

Должен ли он работать так, или я должен добавить печенье вручную второму методу пост и, если да, то каким образом?


Редактировать/Решение

С помощью ответов на этот вопрос, я был в состоянии идентифицировать и решить проблему, которая была за пределами использования HttpClient. В конце концов, это была проблема конфигурации на целевой стороне вики. Ответы здесь помогли мне задать правильные вопросы на другом форуме.

ответ

5

Файлы cookie обрабатываются HTTPClient по умолчанию. Вам не нужно ничего делать, чтобы файлы cookie работали правильно.

Источник: http://www.innovation.ch/java/HTTPClient/getting_started.html#cookies


Edit для Apache HTTP Client:

Apache HTTP-клиент ведет себя так же :-)

Вот источник: http://hc.apache.org/httpclient-3.x/cookies.html

+0

К сожалению, только что понял, есть слишком много «httpclients» вокруг. Я использую Apache HttpClient, ссылочная страница заставляла меня нервничать, но она описывает HTTPClient, что-то другое. Отредактировал мой вопрос, чтобы сделать его немного яснее. –

+0

Я отредактировал свой ответ, чтобы соответствовать HTTP-клиенту Apache, но поведение совершенно не изменилось :-) –

1

You может устанавливать файлы cookie вручную с HTTP-клиентом, но он будет обрабатывать корректно cookie созданных во время вашего соединения.

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


Ресурсы:

+0

В нем указано * при необходимости *, как HttpClient знает, что для второго метода POST нужны файлы cookie? Или у вас есть протокол квитирования с сервером - например, сервер получает POST, а затем запрашивает файлы cookie? –

+0

Когда HTTPClient подключается к вашему серверу, я думаю, что протокол * cookie * будет указывать (зависит от протокола), если необходимы файлы cookie. Но я должен сказать, я даже не знал, что есть RFC на куки. В любом случае, HTTPClient обработает это для вас. –

1

Я исторически использовали это, когда я хотел принять печенье с HttpClient

postPutPage.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); 
+0

Пробовал этот тоже без успеха - еще хуже, с этой настройкой мои файлы cookie были перезаписаны/частично удалены после второго вызова 'executeMethod' ... –

Смежные вопросы