首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java,模拟浏览器

Java,模拟浏览器
EN

Stack Overflow用户
提问于 2013-03-15 22:23:50
回答 1查看 2.2K关注 0票数 1

我正在编写一个小的java程序/api来以编程方式登录到这个http://web2sms.ke.airtel.com (使用登录凭据进行hthp post )。

要发布,我需要参数(登录表单的键和值)。当我通过浏览器呈现表单时,键/名称每次都在变化,但当我通过java代码获取页面时,键下面的键始终是contact f_1.number,因此在我看来,服务器正在区分页面是否从浏览器获取。如何模拟浏览器并获得要由浏览器渲染的图形?

代码语言:javascript
复制
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(); 
  }


}
EN

回答 1

Stack Overflow用户

发布于 2013-03-15 22:31:37

尝试将"User-Agent" HTTP标头设置为实际浏览器会发送的某个值。您可以通过访问http://whatsmyuseragent.com/查看浏览器的用户代理字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15434833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档