1

VB.Net の Web リクエストを通じて Web サイト ("https://instagram.com/") にログインしようとしています。資格情報は正しく、必要なトークンを正しく取得していますが、ログイン時に 403 HTTP エラーが返されます。POST/GET 関数を含む現在のコードは以下にあります。

POST_ERROR: リモート サーバーがエラーを返しました: (403) 許可されていません。

コード:

Imports System.Net
Imports System.IO
Imports System.Text

Module Main
    Dim Token$ = ""
    Dim myCookie As New CookieContainer

    Private Sub UpdateToken(ByVal Page$)
        Token = GetBetween(Page, "csrfmiddlewaretoken" & Chr(34) & " value=" & Chr(34), Chr(34) & "/>")
    End Sub

    Private Function GETreq(ByVal URL$)
        Try
            Dim tempCookie As New CookieContainer
            Dim Request As HttpWebRequest = TryCast(WebRequest.Create(URL), HttpWebRequest)
            Request.Method = "GET"
            Request.CookieContainer = myCookie
            Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0"
            Request.KeepAlive = True

            Dim Response As HttpWebResponse = Request.GetResponse()
            Dim ResponseStream As Stream = Response.GetResponseStream()
            Dim StreamReader As New StreamReader(ResponseStream)
            Dim Text$ = StreamReader.ReadToEnd()

            tempCookie.Add(Response.Cookies)
            myCookie = tempCookie

            Return Text
        Catch ex As Exception
            Console.ForegroundColor = ConsoleColor.Gray
            Console.WriteLine("GET_ERROR: " & ex.Message)
            Return ""
        End Try
    End Function

    Private Function POSTreq(ByVal URL$, ByVal Data$)
        Try
            Dim tempCookie As New CookieContainer
            Dim DataBytes As Byte() = Encoding.ASCII.GetBytes(Data)
            Dim Request As HttpWebRequest = TryCast(WebRequest.Create(URL), HttpWebRequest)
            Request.Method = "POST"
            Request.ContentType = "application/x-www-form-urlencoded"
            Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0"
            Request.ContentLength = DataBytes.Length
            Request.CookieContainer = myCookie
            Request.KeepAlive = True

            Dim PostData As Stream = Request.GetRequestStream()
            PostData.Write(DataBytes, 0, DataBytes.Length)
            PostData.Close()

            Dim Response As HttpWebResponse = Request.GetResponse()
            Dim ResponseStream As Stream = Response.GetResponseStream()
            Dim StreamReader As New StreamReader(ResponseStream)
            Dim Text$ = StreamReader.ReadToEnd()

            tempCookie.Add(Response.Cookies)
            myCookie = tempCookie

            Return Text
        Catch ex As Exception
            Console.ForegroundColor = ConsoleColor.Gray
            Console.WriteLine("POST_ERROR: " & ex.Message)
            Return ""
        End Try
    End Function

    Public Function GetBetween(ByRef strSource$, ByRef strStart$, ByRef strEnd$, Optional ByRef startPos As Integer = 0) As String
        Try
            Dim iPos As Integer, iEnd As Integer, lenStart As Integer = strStart.Length
            Dim strResult$

            strResult = String.Empty
            iPos = strSource.IndexOf(strStart, startPos)
            iEnd = strSource.IndexOf(strEnd, iPos + lenStart)
            If iPos <> -1 AndAlso iEnd <> -1 Then
                strResult = strSource.Substring(iPos + lenStart, iEnd - (iPos + lenStart))
            End If
            Return strResult
        Catch ex As Exception
            Return ""
        End Try
    End Function


    Sub Main()
        Dim Username$ = "XXX"
        Dim Password$ = "XXX"

        UpdateToken(GETreq("https://instagram.com/accounts/login/"))
        UpdateToken(POSTreq("https://instagram.com/accounts/login/", String.Format("csrfmiddlewaretoken={0}&username={1}&password={2}", Token, Username, Password)))

        Console.ReadLine()
    End Sub

End Module
4

0 に答える 0