2011-10-01 18 views
5

Chcę się zalogować do serwisu z Javą. Używam org.apache.http a ja już napisanyZaloguj się na stronie z java

HttpClient client = new DefaultHttpClient(); 
HttpPost post = new HttpPost("https://accounts.google.com/ServiceLogin?  service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F%3Fhl%3Dsl%26tab%3Dwm%26ui%3Dhtml%26zy%3Dl&bsv=llya694le36z&scc=1&ltmpl=default&"); 
try { 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
nameValuePairs.add(new BasicNameValuePair("vb_login_username", 
        "XXX")); 
nameValuePairs.add(new BasicNameValuePair("vb_login_password", 
        "XXX")); 
post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
HttpResponse response = client.execute(post); 
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
String line = ""; 
while ((line = rd.readLine()) != null) { 
System.out.println(line); 
      } 
} catch (IOException e) { 
e.printStackTrace(); 
     } 

Wysyła formularz pocztowy poprawnie ja testowałem, choć ja wciąż nie mogę się zalogować. Strona, którą chcę się zalogować, to: http://www.xtratime.org/forum/ Jakieś pomysły na to czy jest inny sposób?

+2

Dlaczego tam są wszystkie e spacje po '?' w adresie URL? –

+1

Adres URL w kodzie nie jest zgodny z adresem URL witryny docelowej. Czy to nie tylko czerwony śledzia? – BalusC

+0

Co jest w HttpResponse? Czy kod odpowiedzi 200? Czy zwrócony kod HTML nadal jest stroną logowania? – jeff

Odpowiedz

5
<form action="login.php?do=login" method="post" 
    onsubmit="md5hash(vb_login_password, vb_login_md5password, 
     vb_login_md5password_utf, 0)"> 
  • przed złożeniem kodują strona hasło (onsubmit). Powinieneś zrobić to samo w kodzie.

  • Wartość atrybutu action nie jest zgodna z kodem (https://accounts.google.com...). Wyślij prośbę o wpis do login.php?do=login.

I istnieje wiele ukrytych pól:

<input type="hidden" name="s" 
    value="b804473163cb55dce0d43f9f7c41197a" /> 

<input type="hidden" name="securitytoken" 
    value="0dcd78b4c1a376232b62126e7ad568e0d1213f95" /> 

<input type="hidden" name="do" value="login" />  

<input type="hidden" name="vb_login_md5password" /> 

<input type="hidden" name="vb_login_md5password_utf" /> 

Powinieneś wysłać te parametry też.

Zazwyczaj łatwiej jest zainstalować HttpFox Firefox Add-on, aby sprawdzić żądanie parametrów postu niż dekodować javascript.

Moja przeglądarka wysyła te parametry post (zrobione z HttpFox, hasło jest pass1):

vb_login_username: user1 
vb_login_password: 
s: 5d8bd41a83318e683de9c55a38534407 
securitytoken: 0dcd78b4c1a376232b62126e7ad568e0d1213f95 
do: login 
vb_login_md5password: a722c63db8ec8625af6cf71cb8c2d939 
vb_login_md5password_utf: a722c63db8ec8625af6cf71cb8c2d939 

Edit:

Poniższe działa na mnie, mogę dostać „Dziękuję do logowania się w " wiadomość w wydrukowanym kodzie HTML:

final HttpClient client = new DefaultHttpClient(); 
final HttpPost post = new HttpPost(
     "http://www.xtratime.org/forum/login.php?do=login"); 
try { 
    final List<NameValuePair> nameValuePairs = 
     new ArrayList<NameValuePair>(1); 
    nameValuePairs.add(new BasicNameValuePair("vb_login_username", 
      "my user")); 
    nameValuePairs.add(new BasicNameValuePair("vb_login_password", "")); 
    nameValuePairs.add(new BasicNameValuePair("s", "")); 
    nameValuePairs.add(new BasicNameValuePair("securitytoken", 
      "inspected with httpfox, like f48d01...")); 
    nameValuePairs.add(new BasicNameValuePair("do", "login")); 
    nameValuePairs.add(new BasicNameValuePair("vb_login_md5password", 
      "inspected with httpfox, like 8e6ae1...")); 
    nameValuePairs.add(new BasicNameValuePair(
      "vb_login_md5password_utf", 
      "inspected with httpfox, like 8e6ae1...")); 

    post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
    final HttpResponse response = client.execute(post); 
    final BufferedReader rd = new BufferedReader(new InputStreamReader(
      response.getEntity().getContent())); 
    String line = ""; 
    while ((line = rd.readLine()) != null) { 
     System.out.println(line); 
    } 
} catch (final IOException e) { 
    e.printStackTrace(); 
} 
+0

Czy to oznacza, że ​​powinienem mieszać wartość ustawioną dla "vb_login_password" lub wysłać hasz jako coś innego –

+0

Myślę, że powinieneś. Sprawdź moją zaktualizowaną odpowiedź. Proponuję użyć HttpFox, jeśli planujesz użyć tylko jednego hasła. – palacsint

+0

dziękuję za pomoc, ale nadal nie działa –

1

Proponuję użyć htmlunit:

HtmlUnit jest "GUI Mniej przeglądarka dla programów Java". Modeluje dokumenty HTML i zapewnia interfejs API, który umożliwia wywoływanie stron, wypełnianie formularzy, kliknięć linków itp. Tak jak w "normalnej" przeglądarce .

Ma dość dobre wsparcie JavaScript (który jest coraz lepsza) i jest w stanie pracować nawet przy bardzo skomplikowanych bibliotek AJAX, symulując albo Firefox lub Internet Explorer w zależności od konfiguracji chcesz używać.

Jest zwykle używany do testowania lub do pobierania informacji z witryn internetowych.

+0

Czy ten bogaty, stabilny i aktywny projekt jest bogaty w selen? Czy istnieją jakieś silne alternatywy dla GUI-MILE dla HtmlUnit? Dzięki. –

+0

W interfejsie testowania opartym na GUI/przeglądarce mogę otworzyć tylko jedną stronę, ponieważ do kliknięcia jest tylko jeden wskaźnik myszy na komputerze. Czy mogę uruchomić wiele testów na tej samej stronie z jednostką html, ponieważ nie ma gui i prawdopodobnie nie porusza myszą? Dzięki. –

Powiązane problemy