Как получить html перенаправленную веб-страницу программно?

2

Я сделал этот код для входа в систему, чтобы получить и показать веб-страницу:

  // login info array
        string postData = "user_name=tler";
        postData += "&user_password=lodvader";
        byte[] data = Encoding.ASCII.GetBytes(postData);

        // web request
        WebRequest req = WebRequest.Create("http://www.lol.com/login.php");
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        req.ContentLength = data.Length;

        // stream response to string
        Stream newStream = req.GetRequestStream();
        newStream.Write(data, 0, data.Length);
        newStream.Close();
        StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream(), Encoding.GetEncoding("iso-8859-1"));

        string responseString = reader.ReadToEnd();

        // retrieve text within title
        Regex rx = new Regex(@"(?<=<title>).+?(?=</title>)");

        var variable = rx.Matches(responseString);

        // output
        Console.WriteLine(variable[0]);

        Console.ReadLine();

Но следующая страница после входа в систему - это перенаправление html, например:

<meta http-equiv="refresh" content="3; URL="bb.php">

Как перейти по этой ссылке и получить следующую страницу?

Теги:
httpwebrequest

4 ответа

2
Лучший ответ

Я нашел время, чтобы закончить его, вот ответ (я старался быть как можно более ясным):

        // Cookie for our session
        var cookieContainer = new CookieContainer();

        // Encode post variables
        ASCIIEncoding encoding=new ASCIIEncoding();
        byte[] loginDataBytes = encoding.GetBytes("user_name=belaz&user_password=123");

        // Prepare our login HttpWebRequest
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://blabla.fr/verify.php");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.CookieContainer = cookieContainer;
        request.ContentLength = loginDataBytes.Length;

        // Write encoded post variable to the stream
        Stream newStream = request.GetRequestStream();
        newStream.Write(loginDataBytes, 0, loginDataBytes.Length);
        newStream.Close();

        // Retrieve HttpWebResponse
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        // Link the response cookie to the domain
        cookieContainer.Add(new Uri("http://blabla.fr/"),response.Cookies);

        // Prepare our navigate HttpWebRequest, and set his cookie.
        HttpWebRequest requestProfile = (HttpWebRequest)WebRequest.Create("http://blabla.fr/bb.php");
        requestProfile.CookieContainer = cookieContainer;

        // Retrieve HttpWebResponse
        HttpWebResponse responseProfile = (HttpWebResponse)requestProfile.GetResponse();

        // Retrieve stream response and read it to end
        Stream st = responseProfile.GetResponseStream();
        StreamReader sr = new StreamReader(st);
        string buffer = sr.ReadToEnd();
2

Просто отправьте новый WebRequest в файл bb.php. Убедитесь, что вы используете тот же CookieContainer, поскольку я предполагаю, что login.php использует сеансы на основе файлов cookie, чтобы запомнить вас. Проверьте свойство HttpWebRequest.CookieContainer. Это требует от вас вашего WebRequest для HttpWebRequest.

Добавлено: (Не удалось написать примерный код в комментарии.)

Я просто делаю код без проверки теперь...

var cookies = new CookieContainer(); 

var firstReq = (HttpWebRequest)WebRequest.Create(".../login.php");
firstReq.CookieContainer = cookies;

var secondReq = (HttpWebRequest)WebRequest.Create(".../bb.php");
secondReq.CookieContainer = cookies
  • 0
    Пожалуйста, дайте мне пример; D
0

Вы не можете сделать это легко, так как метатег читается клиентом и выполняется.

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

Итак, вам нужно сделать еще один запрос на страницу в атрибуте URL (bb.php).

-

Если сервер выполнил перенаправление, у вас не возникло бы проблемы.

0

Существует свойство HttpWebRequest, называемое AllowAutoRedirects. Установите для этого значение true. Также есть свойство, называемое MaximumAutomaticRedirections. Установите это для некоторого допустимого значения, чтобы убедиться, что все из них соблюдены.

  • 1
    Это только для 30-кратных перенаправлений HTTP-уровня; он не допускает (ужасного) мета-обновления.
  • 0
    Я стою исправлено. Спасибо за информацию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню