1

HTTPWebRequest を使用して外部 Web サイトにログインし、デフォルト ページにリダイレクトする必要があります。以下のコードはボタンの背後にあります。クリックすると、現在いくつかの処理を実行しようとしますが、同じページにとどまります。ログインページを表示せずに、外部 Web サイトのデフォルトページにリダイレクトする必要があります。私が間違っていることについて何か助けはありますか?

    Dim loginURL As String = "https://www.example.com/login.aspx"

    Dim cookies As CookieContainer = New CookieContainer
    Dim myRequest As HttpWebRequest = CType(WebRequest.Create(loginURL), HttpWebRequest)
    myRequest.CookieContainer = cookies
    myRequest.AllowAutoRedirect = True
    myRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1"

    Dim myResponse As HttpWebResponse = CType(myRequest.GetResponse(), HttpWebResponse)

    Dim responseReader As StreamReader
    responseReader = New StreamReader(myResponse.GetResponseStream())
    Dim responseData As String = responseReader.ReadToEnd()
    responseReader.Close()

    'call a function to extract the viewstate needed to login
    Dim ViewState As String = ExtractViewState(responseData)

    Dim postData As String = String.Format("__VIEWSTATE={0}&txtUsername={1}&txtPassword={2}&btnLogin.x=27&btnLogin.y=9", ViewState, "username", "password")
    Dim encoding As UTF8Encoding = New UTF8Encoding()
    Dim data As Byte() = encoding.GetBytes(postData)

    'POST to login page
    Dim postRequest As HttpWebRequest = CType(WebRequest.Create(loginURL), HttpWebRequest)
    postRequest.Method = "POST"
    postRequest.AllowAutoRedirect = True
    postRequest.ContentLength = data.Length
    postRequest.CookieContainer = cookies
    postRequest.ContentType = "application/x-www-form-urlencoded"
    postRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1"

    Dim newStream = postRequest.GetRequestStream()
    newStream.Write(data, 0, data.Length)
    newStream.Close()

    Dim postResponse As HttpWebResponse = CType(postRequest.GetResponse(), HttpWebResponse)

   'using GET request on default page
    Dim getRequest As HttpWebRequest = CType(WebRequest.Create("https://www.example.com/default.aspx"), HttpWebRequest)
    getRequest.CookieContainer = cookies
    getRequest.AllowAutoRedirect = True

    Dim getResponse As HttpWebResponse = CType(getRequest.GetResponse(), HttpWebResponse)
    'returns statuscode = 200

参考までに - このコードを最後に追加すると、リダイレクト先のデフォルト ページの HTML が表示されます

Dim responseReader1 As StreamReader
responseReader1 = New StreamReader(getRequest.GetResponse().GetResponseStream())

responseData = responseReader1.ReadToEnd()
responseReader1.Close()
Response.Write(responseData)

リダイレクトを機能させるために欠けているものについて何か助けはありますか?

乾杯

4

1 に答える 1

0

HttpWebRequest は、サーバーが応答で Location フィールドを含む HTTP 3xx リダイレクト ステータスを送信した場合にのみ、自動的にリダイレクトします。それ以外の場合は、Response.Redirect などを使用して手動でページに移動する必要があります。また、自動リダイレクトでは、サーバーから送信されたすべての Cookie が無視されることに注意してください。サーバーが実際にリダイレクトステータスを送信している場合、それが問題になる可能性があります。

于 2012-09-29T20:52:07.067 に答える