#java #apache #cookies #apache-httpclient-4.x
#java #apache #файлы cookie #apache-httpclient-4.x
Вопрос:
У меня возникла проблема с Apache httpclient для Java. Я пишу бота для входа на веб-сайт, который извлекает все поля из форм входа в систему, заполняет имя пользователя и пароль и входит в учетную запись, отправив запрос POST. Я пробовал использовать классы, предоставляемые java, но каждый раз меня возвращали на страницу входа в систему. Кажется, это работает с клиентом Apache, но я попытался удалить весь код обработки файлов cookie, чтобы проверить, работает ли он по-прежнему. Я больше не сохраняю файлы cookie в списке и не добавляю файлы cookie в запрос, но, похоже, я все еще правильно регистрируюсь. Как это может быть? Я не использую cookiestore и не знаю, откуда берутся файлы cookie, поэтому, очевидно, они должны быть сохранены где-то в фоновом режиме. Мне нужно очистить их, чтобы начать новый сеанс. Я создаю клиент следующим образом
CloseableHttpClient client = HttpClients.createDefault();
и делайте запросы, подобные этому
HttpPost post = new HttpPost(url "/login");
HttpResponse response = client.execute(post);
Ответ №1:
Мой английский оставляет желать лучшего. Файлы cookie на самом деле поступают из CookieStore.Но файлы cookie не обрабатываются при выполнении (запрос HttpUriRequest). Если вы хотите добавить или удалить файлы cookie.вы можете использовать execute(запрос HttpUriRequest, контекст HttpContext). например:
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import java.io.IOException;
/**
* Created by y.wang on 11/16/16.
*/
public class HttpClientTest {
public static void main(String[] args){
CloseableHttpClient client = HttpClients.createDefault();
HttpClientContext httpClientContext = new HttpClientContext();
String url = "";
HttpPost post = new HttpPost(url "/login");
try {
HttpResponse response = client.execute(post, httpClientContext);
} catch (IOException e) {
e.printStackTrace();
}
httpClientContext.getCookieStore().clear();
}
}