войдите в систему и загрузите веб-страницу с Java и хранением куки - PullRequest
1 голос
/ 08 августа 2011

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

import java.net.*;
import java.io.*;
import java.util.*;

public class LoginByHttpPost
{
    private static final String POST_CONTENT_TYPE = "application/x-www-form-urlencoded";     
    private static final String LOGIN_USER_NAME = "myusername";
    private static final String LOGIN_PASSWORD = "mypassword";
    private static final String LOGIN_DOMAIN = "students.ltu.edu.au";

    private static final String TARGET_URL = "https://www.latrobe.edu.au/lms/login/";
    private String page ="";

    public static void main (String args[])
    {
        LoginByHttpPost httpUrlBasicAuthentication = new LoginByHttpPost();
        httpUrlBasicAuthentication.httpPostLogin();
    }

    public void httpPostLogin ()
    {
        try
        {
            String urlEncodedContent = preparePostContent(LOGIN_USER_NAME, LOGIN_PASSWORD, LOGIN_DOMAIN);

            HttpURLConnection urlConnection = doHttpPost(TARGET_URL, urlEncodedContent);

            page = readResponse(urlConnection);

            System.out.println("Successfully made the HTPP POST.");
            System.out.println("Recevied response is: '/n" + page + "'");

        }
        catch(IOException ioException)
        {
            System.out.println("Problems encounterd.");
        }
    }


    private String preparePostContent(String loginUserName, String loginPassword, String loginDomain) throws UnsupportedEncodingException
    {
        String encodedLoginUserName = URLEncoder.encode(loginUserName, "UTF-8");
        String encodedLoginPassword = URLEncoder.encode(loginPassword, "UTF-8");
        String encodedLoginDomain = URLEncoder.encode(loginDomain, "UTF-8");

        String content = URLEncoder.encode("username=", "UTF-8") + encodedLoginUserName
             + URLEncoder.encode("&password=", "UTF-8") + encodedLoginPassword
             + URLEncoder.encode("&domain=", "UTF-8") + encodedLoginDomain
             + URLEncoder.encode("&Login=", "UTF-8") + URLEncoder.encode("Login", "UTF-8");

        return content;

    }


    public HttpURLConnection doHttpPost(String targetUrl, String content) throws IOException
    {
        DataOutputStream dataOutputStream = null;
        HttpURLConnection conn = null; 
        String cookieFirst = null;
        String cookieValue = null;
        String totalCookie = "";
        try
        {
            CookieManager manager = new CookieManager();
            manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
            CookieHandler.setDefault(manager);


            URL url = new URL(targetUrl);
            conn = (HttpURLConnection)url.openConnection();

            conn.getContent();

            CookieStore cookiejar = manager.getCookieStore();
            List<HttpCookie> cookiesList = cookiejar.getCookies();
            for(HttpCookie cookiel: cookiesList)
            {
               totalCookie += cookiel+"; ";
            }
            totalCookie = totalCookie.substring(0, totalCookie.length()-1);
            System.out.println("Total Cookie: " + totalCookie);

        }
        catch(Exception e)
        {
           System.out.println("Something went wrong");
        }

         HttpURLConnection urlConnection = null;

      try{
            URL url = new URL(targetUrl);
            urlConnection = (HttpURLConnection)url.openConnection();
            urlConnection.setDoInput(true);

            urlConnection.setDoOutput(true);

            urlConnection.setUseCaches(true);

            urlConnection.setRequestProperty("Content-Type", POST_CONTENT_TYPE);

            urlConnection.setRequestProperty("Content-Length", Integer.toString(content.length()));

            urlConnection.setInstanceFollowRedirects(true);

            urlConnection.setRequestMethod("POST");

            urlConnection.setRequestProperty("Cookie", totalCookie);

            urlConnection.connect();


            dataOutputStream = new DataOutputStream(urlConnection.getOutputStream());

            dataOutputStream.writeBytes(content);
            dataOutputStream.flush();
            dataOutputStream.close();

        }
        catch(IOException ioException)
        {
            System.out.println("I/O problems while trying to do a HTTP post.");
            ioException.printStackTrace();

            if (dataOutputStream != null)
            {
                try
                {
                    dataOutputStream.close();
                }
                catch(Throwable ignore)
                {
                }
            }
            if (urlConnection != null)
            {
                urlConnection.disconnect();
            }

            throw ioException;
        }

            return urlConnection;

    }


    private String readResponse(HttpURLConnection urlConnection) throws IOException
    {

        BufferedReader bufferedReader = null;
        try
        {
            bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            String responeLine;

            StringBuilder response = new StringBuilder();

            while ((responeLine = bufferedReader.readLine()) != null)
            {
                response.append(responeLine + "\n");
            }

            return response.toString();
        }
        catch(IOException ioException)
        {
            System.out.println("Problems while reading the response");
            ioException.printStackTrace();
            throw ioException;

        }
        finally
        {
            if (bufferedReader != null)
            {
                try
                {
                    bufferedReader.close();
                }
                catch(Throwable ignore)
                {
                }
            }

        }
    }
}

1 Ответ

1 голос
/ 08 августа 2011

Для доступа к этой веб-странице и входа в систему вы используете веб-браузер, а не последовательность команд telnet, потому что это намного проще, верно?Затем, как программист, сделайте то же самое и используйте программный веб-браузер, а не последовательность низкоуровневых действий с использованием файлов cookie и URL-соединений.Это также будет намного проще.

HtmlUnit - это такой программный веб-браузер.Конец Начальной страницы показывает пример загрузки веб-страницы и отправки формы.HtmlUnit будет обрабатывать отправку, обработку файлов cookie, кодирование и т. Д.

...