2013-03-15 1 views
1

내가 프로그래밍 방식 (로그인 자격 증명을 가진 hthp 게시물을 할)/로그인 작은 자바 프로그램/API를 쓰고 있어요 시뮬레이션, 나는에 대한 매개 변수 (키와 값이 필요 로그인 양식). 브라우저를 통해 양식을 렌더링 할 때마다 키/이름이 계속 변경되지만 키 밑의 자바 코드를 통해 페이지를 가져 오는 경우 키가 항상 f_1.number와 연결되므로 서버가 페이지가 있으면 서버를 구분한다는 의미로 서버를 의미합니다. 브라우저에서 가져온 지 여부. 브라우저를 시뮬레이트하고 브라우저에서 렌더링 할 수치를 얻으려면 어떻게해야합니까?자바는,이 <a href="http://web2sms.ke.airtel.com" rel="nofollow">http://web2sms.ke.airtel.com</a></p> <p>에 브라우저

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(); 
    } 


} 
+0

분명히 이것은 서버에 따라 다를 수 있습니다. 자세한 내용을 알려주십시오. 또한, "내 생각에 서버의 차이점은 무엇입니까?" – jazzbassrob

+0

안녕하세요, 즉 서버가 브라우저에서 알 수없는 차별화를 의미했습니다. –

답변

1

"User-Agent" HTTP 헤더를 실제 브라우저에서 보낼 값으로 설정해보십시오. http://whatsmyuseragent.com/을 방문하여 브라우저의 사용자 에이전트 문자열을 확인할 수 있습니다.

+0

안녕하세요, 브라우저가 항상 렌더링하는 다양한 이름/키를 얻을 수 없다는 이유로 사용자 에이전트를 설정해 보았습니다. 예를 들어 사용자 이름과 암호 필드의 키/이름은 무엇일까요? Evertime 페이지를 렌더링하면 프로그램에서 페이지를 렌더링 할 때마다 새로운 페이지가 생성됩니다. 즉, 항상 f_1.number와 f_1.passw –

+1

입니다. 차이를 유발하는 사용자 에이전트 헤더가 아닐 수도 있습니다. 서버 측에 대해 더 많이 알지 못해도 말하기 란 불가능합니다. Firefox에서 웹 콘솔과 같은 도구를 사용하여 브라우저가 보내는 요청의 모든 세부 정보를보고 프로그램에서 동일한 요청을 정확히 재현하려고 시도하십시오. – zagyi

관련 문제