1

大家好,我在互联网上找到了一个可以登录 facebook 的脚本,这很好用,但现在我尝试在另一个网站上登录,但出现 500 错误。

    Dim cookieJar As New Net.CookieContainer()
    Dim request As Net.HttpWebRequest
    Dim response As Net.HttpWebResponse
    Dim strURL As String = "http://xtract.basdistributie.nl:4040/Account/LogOn"

       Try 
        request = Net.HttpWebRequest.Create(strURL)
        request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
        request.Method = "GET"
        request.CookieContainer = cookieJar
        response = request.GetResponse()

        For Each tempCookie As Net.Cookie In response.Cookies
            cookieJar.Add(tempCookie)
        Next

        'Send the post data now
        request = Net.HttpWebRequest.Create(strURL)
        request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
        request.Method = "POST"
        request.AllowAutoRedirect = True
        request.CookieContainer = cookieJar

        Dim writer As StreamWriter = New StreamWriter(request.GetRequestStream())
        writer.Write("username=???????&password=????????")
        writer.Close()

        response = request.GetResponse()

        'Get the data from the page
        Dim stream As StreamReader = New StreamReader(response.GetResponseStream())
        Dim data As String = stream.ReadToEnd()
        response.Close()

        If data.Contains("BAS Distribution Xtract") = True Then
            MsgBox("ingelogd")
        End If
        MsgBox(data)
    Catch e As Exception
        If TypeOf e Is WebException AndAlso DirectCast(e, WebException).Status = WebExceptionStatus.ProtocolError Then
            Dim errResp As WebResponse = DirectCast(e, WebException).Response
            ' read the error response
            Using respStream As Stream = errResp.GetResponseStream()
                MsgBox(e.ToString)
            End Using
        End If
    End Try

错误消息位于 response = request.GetResponse () 我也尝试使用 Fidler 来获得更好的错误消息,但从未使用过这个。我还在互联网上读到了一些错误是因为网站是内置 asp 而不是 .net 这是真的吗?

所有帮助表示赞赏

4

1 回答 1

1

facebook 的登录机制不适用于这个其他站点的原因是因为它们可能没有相同的登录表单参数。

这是您应该如何进行的(尽管此时无法给出确切的答案)

  1. 使用浏览器导航到您要登录的网站
  2. 检查登录表单的 HTML 以获取实际的参数名称。例如,该站点可能使用“uname”而不是“用户名”之类的东西。
  3. 编辑您的代码为表单上的每个输入发布一个值

如果这不起作用:

  1. 安装 WireShark 或类似的东西,以便您可以查看 HTTP 流量
  2. 使用浏览器导航到网站
  3. 使用浏览器登录并使用wireshark 查看登录请求。特别注意 POST 变量的名称和值以及头信息
  4. 根据需要更新您的脚本

如果您需要第 4 步的帮助,请编辑您的帖子以包含第 3 步中的信息。

线鲨

下面是有关如何在此处使用wireshark 的简要说明。我不会详细介绍过滤或类似的东西。你可以用你的眼睛来过滤:P

当你打开wireshark时,你会看到一个接口列表。第 1 步是选择一个接口...

  • 如果您通过 wifi 连接,请选择其中一个 wlan 接口。希望只有一个。否则,您可以依靠反复试验来获得正确的结果
  • 如果您通过网线连接,则选择 eth0。希望只有一个等。

如果没有显示接口列表,则窗口左上方应该有一个图标,看起来有点像打印机。单击它将让您选择接口(单击开始开始捕获)。

登录您的网站(使用您的浏览器)并通过单击带有红色 x 的 icno 立即停止捕获。

现在你需要找到正确的数据包......

您感兴趣的协议是 HTTP。您正在访问的域的名称可能会显示在信息列中。现在我只是假设它确实如此。如果它不只是这样说作为评论。此外,如果您看到 SSL,那么这可能没用。我对ssl还不是很了解...

好的,所以您现在可以识别您发送到 Web 应用程序的数据包。找到一个说 POST 的,看看里面有什么。如果那是您的登录内容,那么这是一场胜利。

记下所有看起来相关的信息。

现在,如果您使用您的应用程序重复整个过程以尝试登录并找到该登录数据包,那么您可以发现差异。

于 2012-11-14T13:40:26.617 回答