4

我想在 WinForm 应用程序的默认浏览器中打开我的应用程序 URL。然后发送一些数据作为 HTTP POST 方法而不是查询字符串。现在的问题是,如果我想在默认浏览器中打开 URL,我使用了以下代码:

Process.Start("http://www.ketabchin.com/sort)

但是在这个命令中,我无法将发布数据发送到那个 url 然后我使用了这个代码:

Public Shared Function PostMessageToURL(url As String) As String
    Dim request As WebRequest = WebRequest.Create("https://www.ketabchin.com/windows-logged")
    request.Method = "POST"
    Dim postData As String = "u=" & FrmMain.Username & "&p=" & FrmMain.Password & "&url=" & url
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
    request.ContentType = "application/x-www-form-urlencoded"
    request.ContentLength = byteArray.Length
    Dim dataStream As Stream = request.GetRequestStream()
    dataStream.Write(byteArray, 0, byteArray.Length)
    dataStream.Close()
    Dim response As WebResponse = request.GetResponse()
    Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
    dataStream = response.GetResponseStream()
    Dim reader As New StreamReader(dataStream)
    Dim responseFromServer As String = reader.ReadToEnd()

    reader.Close()
    dataStream.Close()
    response.Close()
    Return responseFromServer
End Function

这一个将 HTTP POST 请求数据发送到 url,但我无法打开它或默认 Web 浏览器中的响应。我怎样才能做到这一点?这个动作背后的逻辑是。我有一个 WinForm 应用程序,当我的用户在我的应用程序中单击“转到网站”按钮时。我想打开浏览器并将日志数据发送到登录页面,以便用户可以在日志模式下访问该站点。

4

1 回答 1

1

我不知道您的问题是否仍需要解决方案,但我使用您的代码来替代类似问题。我有同样的请求,我需要用户单击 AppForm 按钮来登录网站,但我没有找到任何方法将帖子数据从 VB 应用程序发送到导航器(可能是一种解决方案可能存在于 IE/ Edge 但我的用户可以使用 IE/FF/Chrome)。因此,这是我为找到解决方案而采取的步骤:

  1. 用户必须单击以连接的按钮正在使用您的代码
  2. postData包含网站需要识别用户的所有数据(如用户名和密码)+ IP地址
  3. 该网站检查这些数据,如果一切正常,它会生成一个唯一的 32 位密钥并将其存储在数据库中
  4. 然后网站发送一个json响应{"status" => "ok", "token" => $key, "ip" => $ipFromPostRequest}
  5. VB 应用程序现在正在打开一个带有http://www.website.com/auto-login/32-BITS-之类的链接的程序(您可以找到一些代码来使用默认浏览器打开链接,如果未定义 IE 或 FF)生成的密钥
  6. 如果 Key 和 IP 对应,网站会检查数据库
  7. 网站创建会话并将用户重定向到主页并从数据库中删除密钥

出于安全原因,我认为这不是最佳解决方案,但就我而言,这是一个具有唯一计算机名称和内部 IP 地址的公司网络,并且此过程正在运行。

于 2017-12-14T13:13:05.747 回答