2011-10-01 10 views
5

javaでウェブサイトにログインしたいですか?私はorg.apache.httpを使用して、私はすでに、それは私はまだカントログインかかわらず、投稿フォームが正しく私がテストした送信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(); 
     } 

を書かれました。私がログインしたいウェブサイトはhttp://www.xtratime.org/forum/これに関するアイデアか、それとも別の方法がありますか?

+2

なぜすべてのthosですか? eの後ろの '?'の後ろのスペース? –

+1

コード内のURLは、対象のWebサイトのURLで計算されません。それはちょうど赤いニシンですか? – BalusC

+0

HttpResponseには何がありますか?レスポンスコードは200ですか?返されたHTMLはまだログインページですか? – jeff

答えて

5
<form action="login.php?do=login" method="post" 
    onsubmit="md5hash(vb_login_password, vb_login_md5password, 
     vb_login_md5password_utf, 0)"> 
  • 前のページエンコードにパスワード(onsubmit)を提出します。コード内で同じことを行う必要があります。

  • action属性の値が、コード(https://accounts.google.com...)と一致しません。投稿リクエストはlogin.php?do=loginに送信してください。

と隠しフィールドがたくさんあります。

<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" /> 

あなたも、これらのパラメータを送信する必要があります。

通常、HttpFox Firefox Add-onをインストールすると、ポストパラメータのリクエストをjavascriptのデコードよりも検査する方が簡単です。

私のブラウザがこれらのポストパラメータ(HttpFoxで撮影し、パスワードはpass1で)送信します

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

編集

私のために、次の作品は、私はは「ありがとう得ることができます「」というメッセージが印刷された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

これは、「vb_login_password」に設定した値をハッシュするか、ハッシュを別のものとして送信する必要があることを意味しますか? –

+0

私はそうすべきだと思います。更新された回答を確認してください。 1つのパスワードだけを使用する予定の場合は、HttpFoxを使用することをお勧めします。 – palacsint

+0

助けていただきありがとうございますが、依然として仕事がありません –

1

私はあなたがhtmlunitを使用することをお勧め:

HtmlUnitは、 "JavaプログラムのためのGUIレスのブラウザ" です。 HTML のドキュメントを作成し、 のブラウザと同じように、ページを呼び出したり、 をフォームに記入したり、リンクをクリックしたりするAPIを提供しています。

それは(常に向上している)かなり良いJavaScriptサポート を持っており、あなたが使用したい 構成に応じて のFirefoxやInternet Explorerのいずれかをシミュレートし、でもかなり複雑なAJAXライブラリで作業することができます。

通常、テスト目的やウェブサイトから情報 を検索するために使用されます。

+0

セレンのような豊富で安定したアクティブなプロジェクトですか? HtmlUnitにGUIレスの選択肢がありますか?ありがとう。 –

+0

gui /ブラウザベースのテストAPIでは、クリックするのにコンピュータにマウスポインタが1つしかないため、1つのWebページしか開くことができません。ですから、同じWebサイトで複数のテストをHTML単位で実行することはできますか?これはGUIがなく、おそらくマウスを動かさないからですか?ありがとう。 –

関連する問題