2016-08-14 6 views
0

Ich versuche mich auf einer Webseite mit einem Programm einzuloggen. Ich habe viel gegoogelt, aber die Art, wie andere Leute das machen, funktioniert irgendwie nicht für mich.Java: Wie man sich auf einer Webseite anmeldet

Schritte auf der Website einzuloggen sind wie folgt:

ein PHPSESSID erhalten, indem die Auth.php

eine post-Anfrage mit PHPSESSID als Cookie + Inhalt mit Benutzername Passwort &

senden anfordernden

Ich verwendete Burp-Suite, um die Pakete zu sehen, die während dieses Prozesses gesendet und empfangen wurden.

Das Erhalten der PHPSESSID ist ziemlich direkt, das Setzen des Plätzchens und das Senden einer Postanforderung war auch nicht so schwer, aber die Antwort ist nicht die selbe.

String site = "The Site(Https://....)"; 
    URL myUrl = new URL(site); 
    HttpURLConnection con = (HttpURLConnection) myUrl.openConnection(); 
    con.setRequestMethod("GET"); 
    Map<String, List<String>> headers = con.getHeaderFields(); 
    //Get the PHPSESSID 
    for(Entry<String, List<String>> e : headers.entrySet()){ 
     System.out.println(e.getKey() + ":" + e.getValue()); 
    } 
    List<String> ff = headers.get("Set-Cookie"); 
    String asd = ff.get(0); 
    String[] temp = asd.split(";"); 
    asd = temp[0]; 
    System.out.println(asd); 
    con.disconnect(); 

    myUrl = new URL(site); 
    con = null; 
    con = (HttpURLConnection) myUrl.openConnection(); 
    con.setRequestMethod("POST"); 
    con.setRequestProperty("Host", "The host"); 
    con.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml"); 
    con.setRequestProperty("Accept-Language", "de,en-US;q=0.7,en;q=0.3"); 
    con.setRequestProperty("Referer", "https://ericsson.mareksokol.info/auth.php"); 
    con.setRequestProperty("Connection", "close"); 
    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    con.setRequestProperty("Cookie", asd); 
    con.setRequestProperty("Content-Length", "" +login.length()); 
    con.setDoOutput(true); 
    DataOutputStream wr = new DataOutputStream (
      con.getOutputStream()); 
     wr.writeBytes(login); //login is just copy&pasted from burp-suite 
     wr.close(); 
    System.out.println("\n"); 

    InputStream is = con.getInputStream(); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder response = new StringBuilder(); // 
    String line; 
    while ((line = rd.readLine()) != null) { 
     response.append(line); 
     response.append('\r'); 
    } 
    rd.close(); 
    System.out.println(response); 

Dies ist mein erstes Mal mit einer Website arbeiten und einloggen, ich schätze wirklich jede Hilfe, die Sie mir geben können.

+0

Ich denke, du solltest 'close()' die Verbindungsvariable, bevor du eine andere öffnest, anstatt sie auf null zu setzen. –

+0

@ cricket_007 Ich habe versucht, 'close()' zu verwenden, aber es gibt keine solche Funktion –

+0

'con.close()' sollte existieren –

Antwort

0

Ich werde Ihnen vorschlagen, einen von HTTP-Client-Bibliotheken verwenden für Java: Apache Httpclient, OKHttp usw. Wenn Sie es mit einfachen Connection Objekt machen wollen (beachten Sie, dieses Beispiel für Plain-Authentifizierungsschema ist), können Sie es tun wie folgt:

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 


public class HttpBasicAuth { 

    public static void main(String[] args) { 

     try { 
      URL url = new URL ("http://ip:port/login"); 
      String encoding = Base64Encoder.encode ("test1:test1"); 

      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setRequestMethod("POST"); 
      connection.setDoOutput(true); 
      connection.setRequestProperty ("Authorization", "Basic " + encoding); 
      InputStream content = (InputStream)connection.getInputStream(); 
      BufferedReader in = 
       new BufferedReader (new InputStreamReader (content)); 
      String line; 
      while ((line = in.readLine()) != null) { 
       System.out.println(line); 
      } 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 

    } 

} 
+0

Können Sie Ihre Antwort bearbeiten, um mir zu zeigen, wie Sie zwei aufeinanderfolgende Anfragen bearbeiten würden (z. B. ein GET gefolgt von einer POST-Anfrage) –

Verwandte Themen