2012-03-31 12 views
2

これは私のコードです:ログインフォームにHTTPポストリクエストを送信できません。

public static String sendPostRequest(String url) { 

    StringBuffer sb = null; 

    try { 

     String data = URLEncoder.encode("user", "UTF-8") + "=" 
       + URLEncoder.encode("username", "UTF-8") + "&" 
       + URLEncoder.encode("password", "UTF-8") + "=" 
       + URLEncoder.encode("password", "UTF-8"); 

     System.out.println(data); //Just to check if data is correct 

     URL requestUrl = new URL(url); 
     HttpURLConnection conn = (HttpURLConnection) requestUrl 
       .openConnection(); 
     conn.setDoOutput(true); 
     conn.setDoInput(true); 
     conn.setRequestMethod("POST"); 

     DataOutputStream osw = new DataOutputStream(conn.getOutputStream()); 
     osw.writeBytes(data); 
     osw.flush(); 

     BufferedReader br = new BufferedReader(new InputStreamReader(
       conn.getInputStream())); 

     String in = ""; 
     sb = new StringBuffer(); 

     while ((in = br.readLine()) != null) { 
      sb.append(in + "\n"); 
     } 

     osw.close(); 
     br.close(); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return sb.toString(); 
} 

しかし、私は、このHTTP POST要求を介してログインしようとするたびに、それが含まれているサイトではなく、私の特定のHTMLコードのページに常にあるHTMLコードを返す私のユーザーページ。 HTMLのログインフォームは次のようになります。

<td width="100" align="left"><span class="texte_listing_bold">Login:</span></td> 
    <td width="300" align="center"><input class="form_size1" type="text" name="user"></td> 
    </tr> 
    <tr> 
    <td width="100" align="left"><span class="texte_listing_bold">Password:</span></td> 
    <td width="300" align="center"><input class="form_size1" type="password" name="password"></td> 
    </tr> 
    <tr> 
    <td colspan="2" align="center"> 
     <input type="hidden" name="login_action" value="true"> 
     <input class="bouton_nosize" type="submit" value="Login"> 
    </td> 

通常、ボタンが名前の要素を持っている、と私は私の仕事をして、私がそのようなサイトにログインすることができますコード、が、このウォンを通じてだけでなく、それらを呼び出すことができます何らかの理由で仕事をしていません。これの理由は何ですか?

+0

あなたはそのHTMLを

にラップしましたか? –

答えて

2

このログインフォームでは、値truelogin_actionという非表示の入力フィールドが使用されます。

ユーザー名とパスワードとともにリクエストに渡す必要があります。

必要な情報をすべて入力してください。 ブラウザがHTTPスニッファを使って何を送信しているかを確認できますが、認証しようとしているページのソースを調べるのが最適です。

Webサーバーのログインページのソースにアクセスできない、または制御できない場合は、まずこのコードを記述しないでください。認証メカニズムは将来変更される可能性があり、ボットがユーザーページやウェブスクラップコンテンツにログインできるようにすることは一般的に認められていないため、書き込みするようなスクリプトに対しては多くのセキュリティ制限が存在する可能性があります。

+0

私はwiresharkで盗聴しようとしましたが、これを読む前に文字通り30秒たって笑って、取得したパケットをフィルタリングしてlogin_actionという値をtrueにしてPOSTを表示するだけでしたが、あなたの答えは間違いなく私のお尻を保存していただろうwiresharkを使用していない! – ZimZim

関連する問題