Apache HttpClient - Formularbasierte Anmeldung

Mit der HttpClient-Bibliothek können Sie eine Anfrage senden oder sich bei einem Formular anmelden, indem Sie Parameter übergeben.

Befolgen Sie die unten angegebenen Schritte, um sich bei einem Formular anzumelden.

Schritt 1 - Erstellen Sie ein HttpClient-Objekt

Das createDefault() Methode der HttpClients Klasse gibt ein Objekt der Klasse zurück CloseableHttpClientDies ist die Basisimplementierung der HttpClient-Schnittstelle. Erstellen Sie mit dieser Methode ein HttpClient-Objekt -

CloseableHttpClient httpClient = HttpClients.createDefault();

Schritt 2 - Erstellen Sie ein RequestBuilder-Objekt

Die Klasse RequestBuilderwird verwendet, um eine Anforderung durch Hinzufügen von Parametern zu erstellen. Wenn der Anforderungstyp PUT oder POST ist, werden die Parameter der Anforderung als URL-codierte Entität hinzugefügt

Erstellen Sie ein RequestBuilder-Objekt (vom Typ POST) mit der post () -Methode.

//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post();

Schritt 3 - Setzen Sie Uri und Parameter auf den RequestBuilder.

Setzen Sie den URI und die Parameter mit dem auf das RequestBuilder-Objekt setUri() und addParameter() Methoden der RequestBuilder-Klasse.

//Set URI and parameters
RequestBuilder reqbuilder = reqbuilder.setUri("http://httpbin.org/post");
reqbuilder = reqbuilder1.addParameter("Name", "username").addParameter("password", "password");

Schritt 4 - Erstellen Sie das HttpUriRequest-Objekt

Erstellen Sie nach dem Einstellen der erforderlichen Parameter die HttpUriRequest Objekt mit dem build() Methode.

//Building the HttpUriRequest object
HttpUriRequest httppost = reqbuilder2.build();

Schritt 5 - Führen Sie die Anforderung aus

Die Ausführungsmethode des CloseableHttpClient-Objekts akzeptiert ein HttpUriRequest-Objekt (Schnittstelle) (dh HttpGet, HttpPost, HttpPut, HttpHead usw.) und gibt ein Antwortobjekt zurück.

Führen Sie die in den vorherigen Schritten erstellte HttpUriRequest aus, indem Sie sie an die übergeben execute() Methode.

//Execute the request
HttpResponse httpresponse = httpclient.execute(httppost);

Beispiel

Das folgende Beispiel zeigt, wie Sie sich bei einem Formular anmelden, indem Sie Anmeldeinformationen senden. Hier haben wir zwei Parameter gesendet -username and password in ein Formular und versuchte, die Nachrichtenentität und den Status der Anforderung zu drucken.

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URISyntaxException;

public class FormLoginExample {
 
   public static void main(String args[]) throws Exception {

      //Creating CloseableHttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();
 
      //Creating the RequestBuilder object
      RequestBuilder reqbuilder = RequestBuilder.post();

      //Setting URI and parameters
      RequestBuilder reqbuilder1 = reqbuilder.setUri("http://httpbin.org/post");
      RequestBuilder reqbuilder2 = reqbuilder1.addParameter("Name", 
         "username").addParameter("password", "password");

      //Building the HttpUriRequest object
      HttpUriRequest httppost = reqbuilder2.build();

      //Executing the request
      HttpResponse httpresponse = httpclient.execute(httppost);

      //Printing the status and the contents of the response
      System.out.println(EntityUtils.toString(httpresponse.getEntity()));
      System.out.println(httpresponse.getStatusLine());
   }
}

Ausgabe

Bei der Ausführung generiert das obige Programm die folgende Ausgabe:

{
   "args": {},
   "data": "",
   "files": {},
   "form": {
      "Name": "username",
      "password": "password"
   },
   "headers": {
      "Accept-Encoding": "gzip,deflate",
      "Connection": "close",
      "Content-Length": "31",
      "Content-Type": "application/x-www-form-urlencoded; charset = UTF-8",
      "Host": "httpbin.org",
      "User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_91)"
   },
   "json": null,
   "origin": "117.216.245.180",
   "url": "http://httpbin.org/post"
}
HTTP/1.1 200 OK

Formular Login mit Cookies

Wenn Ihr Formular Cookies speichert, anstatt Standard zu erstellen CloseableHttpClient Objekt.

Create a CookieStore object durch Instanziieren der BasicCookieStore-Klasse.

//Creating a BasicCookieStore object
BasicCookieStore cookieStore = new BasicCookieStore();

Create a HttpClientBuilder Verwendung der custom() Methode der HttpClients Klasse.

//Creating an HttpClientBuilder object
HttpClientBuilder clientbuilder = HttpClients.custom();

Set the cookie store to the client builder Verwenden der Methode setDefaultCookieStore ().

//Setting default cookie store to the client builder object
Clientbuilder = clientbuilder.setDefaultCookieStore(cookieStore);

Bauen Sie die CloseableHttpClient Objekt mit dem build() Methode.

//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder1.build();

Bauen Sie die HttpUriRequest Objekt wie oben angegeben durch Übergeben die Anforderung ausführen.

Wenn auf der Seite Cookies gespeichert werden, werden die von Ihnen übergebenen Parameter dem Cookie-Speicher hinzugefügt.

Sie können den Inhalt des drucken CookieStore Objekt, in dem Sie Ihre Parameter sehen können (zusammen mit den vorherigen die Seite für den Fall gespeichert).

Um die Cookies auszudrucken, erhalten Sie alle Cookies von der CookieStore Objekt mit dem getCookies()Methode. Diese Methode gibt a zurückListObjekt. Drucken Sie mit Iterator den Inhalt der Listenobjekte wie unten gezeigt -

//Printing the cookies
List list = cookieStore.getCookies();

System.out.println("list of cookies");
Iterator it = list.iterator();
if(it.hasNext()) {
   System.out.println(it.next());
}