2016-05-06 10 views
0

Ich versuche mich in this site einzuloggen und einige Daten zu sammeln. Ich habe den Benutzernamen und das Passwort aus dem unten angegebenen Code entfernt, aber wenn die erste URL und das Passwort verwendet werden, bekomme ich eine Antwort, die zeigt, dass die Anmeldung erfolgreich war, nachdem ich die Cookies gespeichert und versucht habe, die zweite Verbindung herzustellen die Abfrage für die Website, die es gerade hängt. keine Fehler und keine Antwort. Ich habe stundenlang gespielt, aber ich verstehe es einfach nicht. Sein immer an dem mit diesem Link läuft client.execute(request) das ist stecken (http:.? // sef.imapp com/iLINKS/property upin = US120860131120280120 & Bericht = Comps & Abstand = 0,5)keine Antwort von HttpGet client.execute (Anfrage) nach der ersten Anmeldung war erfolgreich

ich den Code aus http://www.mkyong.com/java/apache-httpclient-examples/ kopiert (Teil 3) und Änderungen vorgenommen, bis ich die Antwort HTML-Seite angezeigt, die angemeldet ist, aber ich kann nicht die Abfrage URL ausführen.

Ich schätze jede Hilfe, die im Detail erklärt wird. Danke.

package connectors; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.net.CookieHandler; 
import java.net.CookieManager; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.HttpClientBuilder; 
import org.apache.http.message.BasicNameValuePair; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class HttpCilentExampleToMls { 

    private String cookies; 
    private HttpClient client = HttpClientBuilder.create().build(); 
    private final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.36 Safari/537.36"; 

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

    //Login page Changed from google address 
    String url = "http://sef.imapp.com/ilinks/search"; 
    //Search page Changed from gmail address 
    String mlsUrl = "http://sef.imapp.com/ilinks/property?upin=US120860131120280120&report=comps&distance=0.5"; 

    // make sure cookies is turn on 
    CookieHandler.setDefault(new CookieManager()); 

    HttpCilentExampleToMls http = new HttpCilentExampleToMls(); 

    String page = http.GetPageContent(url); 

    List<NameValuePair> postParams = 
       // Changed from "Username" and "Password" 
       http.getFormParams(page, "Username","Password"); 

    http.sendPost(url, postParams); 
    String result = http.GetPageContent(mlsUrl); 
    } 

    private void sendPost(String url, List<NameValuePair> postParams) 
     throws Exception { 

    HttpPost post = new HttpPost(url); 

    // add header 
    post.setHeader("Host", "sef.imapp.com"); 
    post.setHeader("User-Agent", USER_AGENT); 
    post.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 
    post.setHeader("Accept-Language", "en-US,en;q=0.8"); 
    post.setHeader("Cookie", getCookies()); 
    post.setHeader("Connection", "Keep-Alive"); 
    post.setHeader("Referer", "http://sef.imapp.com/ilinks/login?logout=true"); 
    post.setHeader("Content-Type", "application/x-www-form-urlencoded"); 

    post.setEntity(new UrlEncodedFormEntity(postParams)); 

    HttpResponse response = client.execute(post); 

    int responseCode = response.getStatusLine().getStatusCode(); 

    System.out.println("\nSending 'POST' request to URL : " + url); 
    System.out.println("Post parameters : " + postParams); 
    System.out.println("Response Code : " + responseCode); 

    BufferedReader rd = new BufferedReader(
       new InputStreamReader(response.getEntity().getContent())); 

    StringBuffer result = new StringBuffer(); 
    String line = ""; 
    while ((line = rd.readLine()) != null) { 
     result.append(line); 
     System.err.println(line); 
    } 

    // System.out.println(result.toString()); 

    } 

    private String GetPageContent(String url) throws Exception { 

    HttpGet request = new HttpGet(url); 

    request.setHeader("User-Agent", USER_AGENT); 
    request.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 
    request.setHeader("Accept-Language", "en-US,en;q=0.8"); 
    HttpResponse response = client.execute(request); 
    int responseCode = response.getStatusLine().getStatusCode(); 

    System.out.println("\nSending 'GET' request to URL : " + url); 
    System.out.println("Response Code : " + responseCode); 
    BufferedReader rd = new BufferedReader(
       new InputStreamReader(response.getEntity().getContent())); 

    StringBuffer result = new StringBuffer(); 
    String line = ""; 
    while ((line = rd.readLine()) != null) { 
     result.append(line); 
    } 
    // set cookies 
    setCookies(response.getFirstHeader("Set-Cookie") == null ? "" : 
        response.getFirstHeader("Set-Cookie").toString()); 
    return result.toString(); 
    } 

    public List<NameValuePair> getFormParams(
      String html, String username, String password) 
      throws UnsupportedEncodingException { 

    System.out.println("Extracting form's data..."); 

    Document doc = Jsoup.parse(html); 

    // Google form id 
    Element loginform = doc.getElementById("standardLogin"); 
    Elements inputElements = loginform.getElementsByTag("input"); 


    List<NameValuePair> paramList = new ArrayList<NameValuePair>(); 

    for (Element inputElement : inputElements) { 
     String key = inputElement.attr("name"); 
     String value = inputElement.attr("value"); 

     if (key.equals("user")) 
      value = username; 
     else if (key.equals("passwd")) 
      value = password; 

     paramList.add(new BasicNameValuePair(key, value)); 

    } 

    return paramList; 
    } 

    public String getCookies() { 
    return cookies; 
    } 

    public void setCookies(String cookies) { 
    this.cookies = cookies; 
    } 

} 
+0

Sind Sie sicher, dass Sie die 'https'-Site nicht verwenden sollten? Ich habe 'https: // sef.imapp.com/ilink/search' versucht und es fragt nach einem Benutzernamen und einem Passwort. –

+0

Das ist der Fehler, den ich bekomme, wenn ich es so versuche. Ausnahme im Thread "Haupt" javax.net.ssl.SSLProtocolException: Handshake-Warnung: unrecognized_name \t bei sun.security.ssl.ClientHandshaker.handshakeAlert (ClientHandshaker.java:1429) – aronowt

+0

Wer hier kann mir helfen? Ich konnte es ohne Authentifizierung für eine andere Website arbeiten lassen. Ich habe nur eine URL mit seiner Abfrage verwendet und bekam die Antwort und war in der Lage, meine Daten mit dem GetElementsBy zu ziehen ... – aronowt

Antwort

0

hatte ich das gleiche Problem genau den Code mkyong und einen Kommentar von der Website es gelöst versuchen: nach HttpGet oder HttpPost Objekte, verwenden Sie die Methode releaseConnection() in ihnen.

Alex Loginovvor 8 Monaten Hallo, könnte für jemanden nützlich sein: nach Sie die Antwort erhalten, schließen Sie bitte Httppost (HttpGet): post.releaseConnection(); Sonst nach 2 mal haben Sie keine freien Verbindungen und müssen unendlich auf die Freigabe warten - keine Ausnahme wird ausgelöst.

Verwandte Themen