1

このhttp://web2sms.ke.airtel.comにプログラムでログインするための小さな Java プログラム/API を作成しています (ログイン資格情報を使用して hthp 投稿を行います) 。

投稿するには、パラメータ(ログインフォームのキーと値)が必要です。ブラウザ経由でフォームをレンダリングすると、キー/名前は毎回変化し続けますが、キーの下のJavaコードを介してページをフェッチすると、常にf_1.numberに連絡します。したがって、私の考えではサーバーは、ページがブラウザから取得したかどうか。ブラウザをシミュレートして、図をブラウザでレンダリングするにはどうすればよいですか?

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 *
 * @author Dell
 */
public class AirtelWeb2Sms {

    String link = "http://web2sms.ke.airtel.com";
    /**
     * @param args the command line arguments
     */
    private boolean on = false;

    public static void main(String[] args) {
        new AirtelWeb2Sms();
    }

    public AirtelWeb2Sms() {
        login();
    }

  private void login(){
      Map <String, String> parameters = new HashMap();
      try{
           URL url = new URL(link);
           URLConnection yc = url.openConnection();
        BufferedReader in = new BufferedReader(
                                new InputStreamReader(
                                yc.getInputStream()));
            String inputLine;

            while ((inputLine = in.readLine()) != null)
            {
                if(inputLine.contains("<div id=\"loginform\">"))
                {
                    on=true; 
                }

                if(on && (inputLine.contains("input")||inputLine.contains("select"))&& inputLine.contains("name")&& inputLine.contains("value")){
                 //   System.out.println(inputLine);
                  String[] tokens = inputLine.split("\" ");
                    String key="", value="";
                    for(String str: tokens){
                        if(str.contains("name=")){
                            key=str.substring(str.indexOf("\"")+1);
                         }
                        if(str.startsWith("value")){
                            value=str.substring(str.indexOf("\"")+1);
                         }
                        if(key.contains(".number")){
                            value="+25473DummyNumber";
                        }
                        if(key.contains(".passwd")){
                            value="dymmerPassword";
                        }
                        if(key.contains(".language")){
                            value="en";
                        }
                     }
                    parameters.put(key, value=value.replace("&quot;", "\""));
                    System.out.println(key+":"+value);
                }
                if(inputLine.contains("<input type=\"submit\""))
                {
                    on=false; 
                }
            }
            doSubmit(link+"index.hei", parameters);
           }
            catch(Exception ex){
               System.out.println(ex.getLocalizedMessage());
            }
  } 
  public void doSubmit(String url, Map<String, String> data) throws Exception 
  { 
      URL siteUrl = new URL(url); 
      HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection(); 
            conn.setRequestMethod("POST"); conn.setDoOutput(true); 
      conn.setDoInput(true); DataOutputStream out = new DataOutputStream(conn.getOutputStream()); 
      Set keys = data.keySet(); 
      Iterator keyIter = keys.iterator(); String content = "";
      for(int i=0; keyIter.hasNext(); i++) {
          Object key = keyIter.next(); 
          if(i!=0) { 
              content += "&"; 
          } 
          content += key + "=" +data.get(key);
      } 
      System.out.println(content); 
      out.writeBytes(content); 
      out.flush(); 
      out.close(); 
      BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      String line = ""; 
      while((line=in.readLine())!=null) {
          System.out.println(line); } in.close(); 
  }


}
4

1 に答える 1

1

"User-Agent" HTTP ヘッダーを、実際のブラウザーが送信する値に設定してみてください。http://whatsmyuseragent.com/にアクセスすると、ブラウザーのユーザー エージェント文字列を確認できます。

于 2013-03-15T14:31:36.710 に答える