2

DSL ルーター (モデル: Speedport w504v Type A) に正常にログインする方法を見つけようとしています。HttpWebRequest と HttpWebResponse を使用して関数を作成しました。これまでのところ、この機能は完成しておらず、正しいログイン プロセスを見つけるためだけのものです。

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

残念ながら、適切なコンテンツが得られません。代わりに、エラーページから次のようにサイトコンテンツを取得しています。

ダブル管理アクセス!

ログインしようとすると、このサイトが返されますが、別のセッションが既に実行されています。そのため、すでにログインに成功しているのに、サイトのコンテンツを取得できない可能性があります。

HTTP Live Header と呼ばれる Firefox AddOn からヘッダー情報を取得します。curl も実行しようとしましたが、うまくいきませんでした:

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

たぶん、誰かが何がうまくいかないのか考えています。

4

1 に答える 1

0

Fiddlerを使用して、私はそれを理解しました。最初のリクエストのユーザー エージェント ヘッダーも設定する必要があります。

reqLogin.UserAgent = "YOUR USERAGNET STRING"

さらに、 の値を取得する必要はありませんreqLogin.Headers.Get("Cookie")。既に CookieContainer に設定されているため、「Cookie を受け取る」部分をキャンセルします。

于 2012-06-28T10:40:56.867 に答える