фрейм с помощью httpwebrequest, Как получить html код фрейма - CodeHelper

фрейм с помощью httpwebrequest, Как получить html код фрейма

1

Здраствуйте!

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

Option Explicit On
Imports System.IO
Imports System.Net
Imports System.Text
Public Class MailRequest
    Public Sub subRequest()
        Try
            Dim myHttpWebRequest As HttpWebRequest = HttpWebRequest.Create("......../login.php")
            myHttpWebRequest.UserAgent = "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.61"
            myHttpWebRequest.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"
            myHttpWebRequest.Headers.Add("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8")
            myHttpWebRequest.ContentType = "text/html; charset=utf-8"
            Dim myHttpWebResponse As HttpWebResponse = myHttpWebRequest.GetResponse()

            Dim strCookies As String = ""
            If Not String.IsNullOrEmpty(myHttpWebResponse.Headers("Set-Cookie")) Then
                strCookies = myHttpWebResponse.Headers("Set-Cookie")
            End If

            myHttpWebRequest = HttpWebRequest.Create("......./redirect.php")
            myHttpWebRequest.Method = "POST"
            myHttpWebRequest.Referer = "......./login.php"
            myHttpWebRequest.UserAgent = "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.61"
            myHttpWebRequest.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"
            myHttpWebRequest.Headers.Add("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8")
            myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"
            If Not String.IsNullOrEmpty(strCookies) Then
                myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, strCookies)
            End If

            myHttpWebRequest.AllowAutoRedirect = False

                        Dim sQueryString As String = "login_username=strLogin&secretkey=strPassword&js_autodetect_results=1&just_logged_in=1&button=login"
            Dim ByteArr As Byte() = System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString)
            myHttpWebRequest.ContentLength = ByteArr.Length()
            myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length)
            myHttpWebResponse = myHttpWebRequest.GetResponse()
            myHttpWebRequest = HttpWebRequest.Create("....../webmail.php")
            myHttpWebRequest.Referer = "......./login.php"
            myHttpWebRequest.UserAgent = "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.61"
            myHttpWebRequest.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"
            myHttpWebRequest.Headers.Add("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8")
            myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"
            If Not String.IsNullOrEmpty(strCookies) Then
                myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, strCookies)
            End If
            myHttpWebResponse = myHttpWebRequest.GetResponse()
            Dim myStreamReader As New StreamReader(myHttpWebResponse.GetResponseStream, Encoding.GetEncoding(1251))
            console.writeline = myStreamReader.ReadToEnd()
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End Sub
End Class

А как можно получить html код фрейма (left.php & right.php)?

P.S.При анализе с помощью HTTP analyzer(т.е. когда захожу в ручном режиме) сразу со страницей webmail.php загружаются left.php и right.php. Когда запускаю прогу то она дальше страницы с webmail.php не идет. Пробовал сразу после загрузки webmail.php загрузить right.php или left.php после чего прога зависает.

Новые ответы


0

HttpWebRequest, конечно, не загружает код фреймов. Самое правильное здесь — запрашивать дополнительно left.php и right.php. Почему прога при этом зависает — это уже другой вопрос. Возможно косяк в коде или с ответом сервера что-то не так. В любом случае, нужно запрашивать эти страницы (left.php, right.php) и посмотреть в дебаге какой код статуса возвращает сервер и что он пишет в выходной поток. Если зависание вызывает код чтения потока ответа (myStreamReader.ReadToEnd()), то можно попробовать выводить данные на консоль не целиком, а построчно:

myStreamReader.ReadLine()

Еще, у вас в коде объекты Response и StreamReader не финализируются после использования. Это тоже может вызвать проблемы.


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.