2014-10-20 5 views
0

Я пытаюсь войти в свою учетную запись на этот веб-сайт, используя java & jsoup. Но независимо от того, какие изменения я здесь сделал &, я просто возвращаю страницу входа в качестве ответа. У меня должно быть что-то не так?Использование Jsoup для входа в систему и данные cookie

Я использовал Firefox Firebug, Chrome и Fiddler, чтобы узнать, какие значения отправляются. Я посмотрел на некоторые другие ответы здесь, на StackOverflow на jsoup, и считаю, что я выполняю правильную процедуру. Если кто-нибудь увидит мои ошибки, я буду благодарен за помощь.

String loginURL = "http://members.permaculturedesigncourse.com/login"; 
    String dashURL = "http://members.permaculturedesigncourse.com/dashboard"; 
    String sUserName = "[email protected]"; 
    String sPass = "mypassword"; 

    try { 

     Connection.Response login_get_res = Jsoup 
       .connect(loginURL) 
       .method(Connection.Method.GET) 
       .execute(); 

     Element mySession = login_get_res.parse().getElementById("new_user_session"); 
     String authenticityToken = mySession.select("input[name=authenticity_token]").first().val(); 
     Map<String, String> cookiesFromGet = login_get_res.cookies(); 


     Connection.Response login_post_res = Jsoup 
       .connect(loginURL) 
       .data("authenticity_token", authenticityToken) 
       .data("user_session[email]", sUserName) 
       .data("user_session[password]", sPass) 
       .data("user_session[remember_me]", "0") 
       .data("x", "0") 
       .data("y", "0") 
       .referrer(loginURL) 
       .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36") 
       .cookies(cookiesFromGet) 
       .timeout(12000) 
       .method(Connection.Method.POST) 
       .execute(); 
     Document return_page = login_post_res.parse();  
     String title = return_page.title(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

ответ

1

Храните все свои данные в данных HashMap и отправляйте их как поле данных. Например, я хотел бы сделать:

HashMap<String, String> map = new HashMap<String, String>(); 
map.put("userName", userName); 
map.put("password", password); 
map.put("somethingelse", value); 
map.put("anotherthing", anothervalue); 

Document doc = null; 
try { 
    doc = Jsoup.connect(loginUrl).data(map).cookies(cookiesFromGet).post(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Кроме того, я не думаю, что .cookies() возвращает печенье, как вы пытались сделать здесь:

Map<String, String> cookiesFromGet = login_get_res.cookies(); 

Я хотел бы попробовать использовать HttpConnection, чтобы получить печенье. Как так:

HttpClient httpClient = new DefaultHttpClient(); 
HttpGet httpget = new HttpGet(loginUrl); 
HttpResponse response = null; 
String responseString = null; 
try { 
    response = httpClient.execute(httpget); 
    responseString = new BasicResponseHandler().handleResponse(response); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

CookieStore cookieStore = ((AbstractHttpClient) httpClient).getCookieStore(); 
HashMap<String, String> cookies = new HashMap<String, String>(); 
cookies = mapCookies(cookieStore.getCookies()); 

Наконец, вы, возможно, придется внести некоторые изменения в код сайта, чтобы проверить, если переменные POST были отправлены и пользовательский контент дисплей вместо страницы входа. Я не могу сказать, сделали ли вы это, потому что я не видел ваш веб-код.

+0

Я ценю дополнительную правку, но ваша ссылка на AbstractHttpClient устарела. Я, возможно, получил его, изменив его на: –

+0

Я ценю дополнительную правку, но ваша ссылка на AbstractHttpClient устарела. Я, возможно, получил его, перейдя на: CookieStore cookieStore = (CookieStore) ((AbstractHttpClient) httpClient) .getCookieStore(); \t \t Но ваш метод mapCookie() не устраняет. Кроме того, я мог бы ошибиться, но это не мой сайт, на который я пытаюсь войти. У меня есть учетная запись на сайте другой компании. Поэтому я не могу «внести некоторые изменения в код вашего сайта, чтобы проверить, были ли отправлены переменные POST» –

Смежные вопросы