Hello!
After successful programmatic authorization on the site, it is necessary to go to another page of this site without being logged out. As I understand it, you need to log in, get cookies, save them for the next request.
An attempt to get cookies from the first request fails: "No cookies". What could be the problem?
I do as follows:
import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.CookieStore; import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.params.ClientPNames; import org.apache.http.client.params.CookiePolicy; import org.apache.http.client.protocol.ClientContext; import org.apache.http.cookie.Cookie; import org.apache.http.impl.client.*; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HttpContext; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) throws Exception { DefaultHttpClient httpclient = new DefaultHttpClient(); try { CookieStore cookieStore = new BasicCookieStore(); HttpContext localContext = new BasicHttpContext(); localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); HttpClient instance = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build(); HttpPost httpost = new HttpPost("http://url"); HttpResponse httppost = instance.execute(httpost); List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("userid", "myid")); nvps.add(new BasicNameValuePair("userpass", "mypass")); httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); ResponseHandler<String> responseHandler = new BasicResponseHandler(); String responseBody = instance.execute(httpost, responseHandler); List<Cookie> cookies = httpclient.getCookieStore().getCookies(); if (cookies.isEmpty()) { System.out.println("No cookies"); } else { for (int i = 0; i < cookies.size(); i++) { System.out.println("- " + cookies.get(i).toString()); } } //Второй post-запрос /* HttpClient instance2 = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build(); HttpPost httpost2 = new HttpPost("http://url2"); httpclient.setCookieStore(cookieStore); HttpResponse httppost2 = instance.execute(httpost2); ResponseHandler<String> responseHandler2 = new BasicResponseHandler(); String responseBody2 = instance2.execute(httpost2, responseHandler2); System.out.println(responseBody2); System.out.println("++++++++++++++++++++++++++++++++++++");*/ } finally { httpclient.getConnectionManager().shutdown(); System.out.println("Это конец."); } } } Everything turns out if you do as Phoen-X indicated below, thanks! Further, I try to install the received cookies, create a new request, but in response I receive that I am not an authorized user. How to make the second request as an already authorized user? Perhaps I do something stupid, but I do it like this:
BasicClientCookie cookie1 = new BasicClientCookie("mykey", cookie.getValue()); cookie1.setDomain("domain"); cookie1.setPath("/"); cookieStore.addCookie(cookie1); HttpClient instance2 = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build(); HttpPost httpost2 = new HttpPost("http://url2"); HttpResponse response2 = instance2.execute(httpost2, httpContext); ResponseHandler<String> responseHandler2 = new BasicResponseHandler(); String responseBody2 = instance2.execute(httpost2, responseHandler2); System.out.println(responseBody2); System.out.println("++++++++++++++++++++++++++++++++++++"); System.out.println(response2);