Войти на сайт с Java - PullRequest
       12

Войти на сайт с Java

5 голосов
/ 01 октября 2011

Я хотел бы войти на сайт с Java.Я использую org.apache.http, и я уже написал

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("https://accounts.google.com/ServiceLogin?      service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F%3Fhl%3Dsl%26tab%3Dwm%26ui%3Dhtml%26zy%3Dl&bsv=llya694le36z&scc=1&ltmpl=default&");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("vb_login_username",
                    "XXX"));
nameValuePairs.add(new BasicNameValuePair("vb_login_password",
                    "XXX"));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = client.execute(post);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null) {
System.out.println(line);
            }
} catch (IOException e) {
e.printStackTrace();
        }

. Он отправляет форму сообщения, которую я правильно протестировал, хотя я все еще не могу войти.Веб-сайт, на который я хочу войти, http://www.xtratime.org/forum/ Есть идеи для этого или есть другой способ?

Ответы [ 2 ]

5 голосов
/ 02 октября 2011
<form action="login.php?do=login" method="post" 
    onsubmit="md5hash(vb_login_password, vb_login_md5password, 
        vb_login_md5password_utf, 0)">
  • Перед отправкой страницы закодируйте пароль (onsubmit).Вы должны сделать то же самое в коде.

  • Значение атрибута action не соответствует вашему коду (https://accounts.google.com...).Вы должны отправить запрос на сообщение в login.php?do=login.

И есть много скрытых полей:

<input type="hidden" name="s" 
    value="b804473163cb55dce0d43f9f7c41197a" />

<input type="hidden" name="securitytoken" 
    value="0dcd78b4c1a376232b62126e7ad568e0d1213f95" />

<input type="hidden" name="do" value="login" />     

<input type="hidden" name="vb_login_md5password" />

<input type="hidden" name="vb_login_md5password_utf" />

Вам также следует отправить эти параметры.

Обычно проще установить HttpFox Firefox Add-on для проверки запроса параметров публикации, чем декодировать javascript.

Мой браузер отправляет эти параметры записи (захвачено с помощьюHttpFox, пароль pass1):

vb_login_username: user1
vb_login_password:
s: 5d8bd41a83318e683de9c55a38534407
securitytoken: 0dcd78b4c1a376232b62126e7ad568e0d1213f95
do: login
vb_login_md5password: a722c63db8ec8625af6cf71cb8c2d939
vb_login_md5password_utf: a722c63db8ec8625af6cf71cb8c2d939

Редактировать :

У меня работает следующее, могу получить "Спасибо завход в систему " сообщение в напечатанном html-коде:

final HttpClient client = new DefaultHttpClient();
final HttpPost post = new HttpPost(
        "http://www.xtratime.org/forum/login.php?do=login");
try {
    final List<NameValuePair> nameValuePairs = 
        new ArrayList<NameValuePair>(1);
    nameValuePairs.add(new BasicNameValuePair("vb_login_username",
            "my user"));
    nameValuePairs.add(new BasicNameValuePair("vb_login_password", ""));
    nameValuePairs.add(new BasicNameValuePair("s", ""));
    nameValuePairs.add(new BasicNameValuePair("securitytoken",
            "inspected with httpfox, like f48d01..."));
    nameValuePairs.add(new BasicNameValuePair("do", "login"));
    nameValuePairs.add(new BasicNameValuePair("vb_login_md5password",
            "inspected with httpfox, like 8e6ae1..."));
    nameValuePairs.add(new BasicNameValuePair(
            "vb_login_md5password_utf",
            "inspected with httpfox, like 8e6ae1..."));

    post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    final HttpResponse response = client.execute(post);
    final BufferedReader rd = new BufferedReader(new InputStreamReader(
            response.getEntity().getContent()));
    String line = "";
    while ((line = rd.readLine()) != null) {
        System.out.println(line);
    }
} catch (final IOException e) {
    e.printStackTrace();
}
1 голос
/ 01 октября 2011

Я предлагаю вам использовать htmlunit :

HtmlUnit - это «браузер без графического интерфейса для программ Java». Моделирует HTML документы и предоставляет API, который позволяет вызывать страницы, заполнять формы, нажмите ссылки и т. д., как вы делаете в «нормальном» браузер.

Имеет довольно хорошую поддержку JavaScript (которая постоянно улучшается) и способен работать даже с довольно сложными библиотеками AJAX, имитируя либо Firefox или Internet Explorer в зависимости от конфигурации, которую вы хочу использовать.

Обычно используется для тестирования или получения информации. с веб-сайтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...