Не можете отправить HTTP Post Request в форму входа? - PullRequest
2 голосов
/ 31 марта 2012

Это мой код:

public static String sendPostRequest(String url) {

    StringBuffer sb = null;

    try {

        String data = URLEncoder.encode("user", "UTF-8") + "="
                + URLEncoder.encode("username", "UTF-8") + "&"
                + URLEncoder.encode("password", "UTF-8") + "="
                + URLEncoder.encode("password", "UTF-8");

        System.out.println(data); //Just to check if data is correct

        URL requestUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) requestUrl
                .openConnection();
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestMethod("POST");

        DataOutputStream osw = new DataOutputStream(conn.getOutputStream());
        osw.writeBytes(data);
        osw.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));

        String in = "";
        sb = new StringBuffer();

        while ((in = br.readLine()) != null) {
            sb.append(in + "\n");
        }

        osw.close();
        br.close();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return sb.toString();
}

Но всякий раз, когда я пытаюсь войти через этот http-запрос, он возвращает html-код, который всегда находится на этой странице сайта, а не мой конкретный html-код, который содержит мою страницу пользователя. Форма входа в html выглядит следующим образом:

 <td width="100" align="left"><span class="texte_listing_bold">Login:</span></td>
    <td width="300" align="center"><input class="form_size1" type="text" name="user"></td>
  </tr>
  <tr>
    <td width="100" align="left"><span class="texte_listing_bold">Password:</span></td>
    <td width="300" align="center"><input class="form_size1" type="password" name="password"></td>
  </tr>
  <tr>
    <td colspan="2" align="center">
        <input type="hidden" name="login_action" value="true">
        <input class="bouton_nosize" type="submit" value="Login">
    </td>

Обычно кнопки имеют элементы name, и я могу также вызывать их через мой код, который работает и позволяет мне заходить на такой сайт, но по какой-то причине это не сработает. В чем причина?

1 Ответ

2 голосов
/ 31 марта 2012

В этой форме входа в систему используется скрытое поле ввода с именем login_action со значением true.

. Вам необходимо будет указать это в своем запросе вместе с именем пользователя и паролем.

Просто убедитесь, что вы предоставили всю необходимую информацию.Вы можете проверить, что браузер отправляет, используя сниффер HTTP, но лучше всего было бы взглянуть на источники страницы, с которой вы пытаетесь пройти аутентификацию.

Если у вас нет доступа или контроля над веб-серверомИсходный код страницы входа, то, вероятно, вы не должны писать этот код в первую очередь.Механизм аутентификации может измениться в будущем, и может быть много ограничений безопасности для сценариев, таких как тот, который вы пытаетесь написать, так как обычно боты не могут входить на пользовательские страницы и содержимое веб-утилит.

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