2009-12-14 4 views
2

다음 시나리오에 대한 예제, 팁, 지침이 있습니까?apache HttpClient에서 페이스 북에 액세스

자바 응용 프로그램을 통해 페이스 북에 액세스하기 위해 브라우저의 기능을 시뮬레이트하기 위해 Apache HttpClient를 사용했습니다. 먼저 사용자 자격 증명을 제공해야합니다. 나는 다음 웹 사이트에서 제공되는 예제를 사용했다.

http://svn.apache.org/viewvc/httpcomponents/oac.hc3x/trunk/src/examples/

그러나 이러한 방법의 비는 다음, 페이스 북 작동 내가이 목적을 위해 작성한 테스트 코드입니다. 나는 모든 방법을 서면으로 제공하지 않았으며, 페이스 북 계정에 로그인하는 데 사용 된 방법 만이 여기에 주어졌다. 어떤 도움을

private static int connectAndLogin(String email, String pass){ 
    logger.trace("Facebook: =========connectAndLogin begin==========="); 

    String httpResponseBody = getMethod("http://www.facebook.com/login.php"); 
    if(httpResponseBody == null){ 
     //Why don't we try again? 
     try 
     { 
      Thread.sleep(1000); 
     } 
     catch (InterruptedException e) 
     { 
      logger.trace(e.getMessage()); 
     } 
     httpResponseBody = getMethod("http://www.facebook.com/login.php"); 
    } 
    logger.trace("Facebook: ========= get login page ResponseBody begin==========="); 
    logger.trace(httpResponseBody); 
    logger.trace("Facebook: +++++++++ get login page ResponseBody end+++++++++"); 

    logger.trace("Facebook: Initial cookies: "); 
    List<Cookie> cookies = getCookies(); 
    if (cookies.isEmpty()) { 
     logger.trace("Facebook: None"); 
    } else { 
     for (int i = 0; i < cookies.size(); i++) { 
      logger.trace("Facebook: - " + cookies.get(i).toString()); 
     } 
    } 
    if(httpResponseBody == null){ 
     logger.warn("Facebook: Warning: Failed to get facebook login page."); 
    } 

    try 
    { 
     HttpPost httpost = new HttpPost("http://www.facebook.com/login.php"); 

     List <NameValuePair> nvps = new ArrayList <NameValuePair>(); 
     nvps.add(new BasicNameValuePair("email", email)); 
     nvps.add(new BasicNameValuePair("pass", pass)); 
     //don't know if is this necessary 
     nvps.add(new BasicNameValuePair("login", "")); 

     httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); 
     logger.info("Facebook: @executing post method to:" + "http://www.facebook.com/login.php"); 

     HttpResponse loginPostResponse = getHttpClient().execute(httpost); 
     HttpEntity entity = loginPostResponse.getEntity(); 

     logger.trace("Facebook: Login form post: " + loginPostResponse.getStatusLine()); 
     if (entity != null) { 
      logger.trace("Facebook: "+EntityUtils.toString(entity)); 
      entity.consumeContent(); 
     } else { 
      logger.error("Facebook: Error: login post's response entity is null"); 
      return FacebookErrorCode.kError_Login_GenericError; 
     } 

     logger.trace("Facebook: Post logon cookies:"); 
     cookies = getCookies(); 
     if (cookies.isEmpty()) { 
      logger.trace("Facebook: None"); 
     } else { 
      for (int i = 0; i < cookies.size(); i++) { 
       logger.trace("Facebook: - " + cookies.get(i).toString()); 
      } 
     } 

     int statusCode = loginPostResponse.getStatusLine().getStatusCode(); 

     logger.info("Facebook: Post Method done(" + statusCode + ")"); 



     switch(statusCode){ 
     case 100: break;//we should try again; 
     case 301: 
     case 302: 
     case 303: 
     case 307: 
     { 
      //redirect 
    //    Header[] headers = loginPostResponse.getAllHeaders(); 
    //    for (int i=0; i<headers.length; i++) { 
    //     logger.trace("Facebook: "+headers[i]); 
    //    } 
    //    Header locationHeader =   loginPostResponse.getFirstHeader("location"); 
    //    if(locationHeader != null){ 
    //     homePageUrl = locationHeader.getValue(); 
    //     logger.info("Facebook: Redirect Location: " + homePageUrl); 
    //     if(homePageUrl == null 
    //      || !homePageUrl.contains("facebook.com/home.php")){ 
    //      logger.error("Facebook: Login error! Redirect Location Url not contains \"facebook.com/home.php\""); 
    //      return FacebookErrorCode.kError_Login_GenericError; 
    //     } 
    //    } else { 
    //     logger.warn("Facebook: Warning: Got no redirect location."); 
    //    } 
     } 
     break; 
     default:; 
     } 
    } 
    catch (IOException ioe) 
    { 
     logger.error("Facebook: IOException\n" + ioe.getMessage()); 
     return FacebookErrorCode.kError_Global_ValidationError; 
    } 

    logger.trace("Facebook: =========connectAndLogin end=========="); 
    return FacebookErrorCode.Error_Global_NoError; 
} 

답변

2

that sample에 따라 다음의 코드는, 나를 위해 일한 : 코드가 (세션 ID가 그 중 하나 내에서 유지)가 제대로 쿠키를 관리하는 경우

DefaultHttpClient httpclient = new DefaultHttpClient(); 

HttpGet httpget = new HttpGet("http://www.facebook.com/login.php"); 

HttpResponse response = httpclient.execute(httpget); 
HttpEntity entity = response.getEntity(); 

System.out.println("Login form get: " + response.getStatusLine()); 
if (entity != null) { 
    entity.consumeContent(); 
} 
System.out.println("Initial set of cookies:"); 
List<Cookie> cookies = httpclient.getCookieStore().getCookies(); 
if (cookies.isEmpty()) { 
    System.out.println("None"); 
} else { 
    for (int i = 0; i < cookies.size(); i++) { 
     System.out.println("- " + cookies.get(i).toString()); 
    } 
} 

HttpPost httpost = new HttpPost("http://www.facebook.com/login.php"); 

List <NameValuePair> nvps = new ArrayList <NameValuePair>(); 
nvps.add(new BasicNameValuePair("email", "******")); 
nvps.add(new BasicNameValuePair("pass", "*******")); 

httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); 

response = httpclient.execute(httpost); 
entity = response.getEntity(); 
System.out.println("Double check we've got right page " + EntityUtils.toString(entity)); 

System.out.println("Login form get: " + response.getStatusLine()); 
if (entity != null) { 
    entity.consumeContent(); 
} 

System.out.println("Post logon cookies:"); 
cookies = httpclient.getCookieStore().getCookies(); 
if (cookies.isEmpty()) { 
    System.out.println("None"); 
} else { 
    for (int i = 0; i < cookies.size(); i++) { 
     System.out.println("- " + cookies.get(i).toString()); 
    } 
} 

httpclient.getConnectionManager().shutdown(); 

나는 확실하지 않다, 어쩌면 그게 문제였다 . 희망이 당신을 도울 것입니다.

명확한 버전 문제를 만들기 위해서 : 이전 버전 (3.X)이 아닌 HttpClient 버전 4.X를 사용하고있었습니다. 그들은 크게 다릅니다.

+0

Thankx lot buddy, 이것에 머 무르는 시간 동안 고맙습니다, – KItis

+0

그것은 내 사용자 이름 및 암호로 로그인합니다. 친구들이 로그인을 시도 할 때 – muthu

0

감사 릴레이에 아마 당신이 도구를 사용한다, 같은 Selenium

0

당신은 HtmlUnit에서 모습을 촬영하게한다. HttpClient를 랩핑하여 헤드리스 자바 브라우저를 만들고 자바 스크립트를 실행합니다. 이렇게하면 항상 개인 양식을 해킹하려고 시도하지 않습니다.

관련 문제