2012-06-27 6 views
2

Я пытаюсь выяснить, как успешно войти в DSL-маршрутизатор (модель: Speedport w504v Type A). Я написал функцию usinig HttpWebRequest и HttpWebResponse. Пока эта функция еще не закончена и предназначена только для определения правильного процесса входа в систему.Как подключиться к маршрутизатору с помощью HttpWebRequest?

Public Function DoRequest(ByVal url As String, ByVal password As String, ByVal container As CookieContainer) As String 

    'Login Request 
    Dim reqLogin As HttpWebRequest = DirectCast(HttpWebRequest.Create("https://speedport.ip/cgi-bin/login.cgi"), HttpWebRequest) 
    reqLogin.CookieContainer = container 
    reqLogin.Method = "POST" 
    reqLogin.Referer = "https://speedport.ip/hcti_start_passwort.stm" 
    reqLogin.KeepAlive = True 
    reqLogin.Host = "speedport.ip" 
    reqLogin.ContentType = "application/x-www-form-urlencoded" 
    reqLogin.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" 
    reqLogin.Headers.Add("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3") 
    reqLogin.Headers.Add("Accept-Encoding", "gzip, deflate") 

    'Login Data 
    Dim encoding As New ASCIIEncoding() 
    Dim data As String = Uri.EscapeDataString("pws") & "=" & Uri.EscapeDataString(password) 
    Dim bytes As Byte() = encoding.GetBytes(data) 
    reqLogin.ContentLength = bytes.Length 
    Dim stream As Stream = reqLogin.GetRequestStream 
    stream.Write(bytes, 0, bytes.Length) 
    stream.Close() 

    'Login Response 
    Dim resLogin As HttpWebResponse = DirectCast(reqLogin.GetResponse(), HttpWebResponse) 

    'Receive Cookie 
    Dim CookieHeaderValue As String = reqLogin.Headers.Get("Cookie") 
    If CookieHeaderValue <> Nothing Then 
     Dim aCookie As String() = CookieHeaderValue.Split("=") 
     Dim Cookie As New Cookie 
     Cookie.Domain = "speedport.ip" 
     Cookie.Path = "/" 
     Cookie.Secure = True 
     Cookie.Name = aCookie(0) 
     Cookie.Value = aCookie(1) 
     container.Add(Cookie) 
    End If 

    'Url Request 
    Dim reqIndex As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest) 
    reqIndex.CookieContainer = container 
    reqIndex.Method = "GET" 
    reqIndex.Referer = "https://speedport.ip/wait_login.stm" 
    reqIndex.KeepAlive = True 
    reqIndex.Host = "speedport.ip" 
    reqIndex.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" 

    'Url Content 
    Dim resIndex As HttpWebResponse = DirectCast(reqIndex.GetResponse(), HttpWebResponse) 
    Dim sr As StreamReader = New StreamReader(resIndex.GetResponseStream()) 
    Dim output As String = sr.ReadToEnd 
    resIndex.Close() 

    Return output 
End Function 

К сожалению, я не получаю правильный контент. Вместо этого я получаю sittontent из сообщения Error-Page:

двойной доступ администратора!

Этот сайт возвращается при попытке входа в систему, но есть еще одна сессия, уже запущенная. Так что, возможно, я уже успешно вошел в систему, но не получаю содержание сайта.

Я получаю информацию заголовка из Firefox AddOn под заголовком HTTP Live Header. Я также попытался запустить завиток, но не получилось:

curl -d "pws=PASSWORD" -c cookies.txt -e https://speedport.ip/hcti_start_passwort.stm -k https://speedport.ip/cgi-bin/login.cgi 
curl -c cookies.txt -e https://speedport.ip/wait_login.stm -k https://speedport.ip/index.stm 

Может быть кто-то имеет представление о том, что происходит не так.

ответ

0

Используя Скрипач, я понял это. Я должен установить также заголовок User Agent для первого запроса.

reqLogin.UserAgent = "YOUR USERAGNET STRING" 

Кроме того, я не должен получить значение для reqLogin.Headers.Get("Cookie"). Он уже установлен в CookieContainer, поэтому отмените часть «Получить Cookie».

Смежные вопросы