【问题标题】:Visual Basic 2010 / .NET | Fast POST Request to WebVisual Basic 2010 / .NET |对 Web 的快速 POST 请求
【发布时间】:2011-04-01 17:08:00
【问题描述】:

我正在编写一个程序,该程序必须通过 API 样式调用(POST 请求)与基于 PHP/Web 的后端进行通信。我目前拥有的代码非常慢 - 每个请求需要 2-3 秒 - 是否有更快的方法或可以用来加快当前请求方法的方法:

Function PostData(ByRef Data() As PostData, ByVal URL As String)
    Dim Requester As HttpWebRequest = HttpWebRequest.Create(URL)
    Requester.Method = "post"
    'Requester.Proxy = New System.Net.WebProxy("localhost", 1234)
    'Requester.
    Dim ASCIIEncoding As Encoding = New ASCIIEncoding
    Dim DataString As String = "apirequest=true"

    For Each DataItem As PostData In Data
        DataString = DataString & "&" & DataItem.Key & "=" & DataItem.Value
    Next

    DataString = Right(DataString, Len(DataString) - 1)

    Dim RawData() As Byte = ASCIIEncoding.GetBytes(DataString)

    Requester.Method = "POST"
    Requester.ContentType = "application/x-www-form-urlencoded"
    Requester.ContentLength = RawData.Length
    Requester.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"
    Dim NewStream As Stream = Requester.GetRequestStream()

    NewStream.Write(RawData, 0, RawData.Length)
    NewStream.Close()

    Dim ResponseStreamReader As StreamReader = New StreamReader(Requester.GetResponse().GetResponseStream())

    Return ResponseStreamReader.ReadToEnd()
End Function

【问题讨论】:

    标签: .net vb.net http post


    【解决方案1】:

    您应该将响应和 StreamReader 包装在 Using 语句中,以确保在您完成它们后立即将它们处理掉。

    此外,您应该直接写信给GetRequestStream(使用StreamWriter),而不是在循环中手动连接字符串。

    但是,它变慢的真正原因是您的互联网连接和/或服务器端脚本太慢。
    让它们更快。

    【讨论】:

    • 我的网络连接速度非常快,服务器也运行得很快。即使在其他网站(例如 Google)上进行测试,它仍然很慢。
    【解决方案2】:

    如果您不使用代理,我记得将 Proxy 属性设置为 null。

    我仍然同意字符串连接和处理建议,并认为使用 WebClient 代码会更容易。

    【讨论】:

      【解决方案3】:
      Dim urlphp As String = "" & dominio & "" & carpetanoti & "/demanda_alta.php"
      Dim Conexion As HttpWebRequest = CType(WebRequest.Create(urlphp), HttpWebRequest)
      Conexion.Method = "POST"
      Conexion.ContentType = "application/x-www-form-urlencoded"
      Dim POST_DATA As String = ("&cTitulo=" & "Te necesitamos!!" & "&cMensaje=" & "ALTA DEMANDA TENEMOS DOMICILIOS PARA TI" & "")
      Dim byteArray() As Byte = Encoding.UTF8.GetBytes(POST_DATA)
      Conexion.ContentLength = byteArray.Length
      Dim FLUJO As Stream = Conexion.GetRequestStream()
      FLUJO.Write(byteArray, 0, byteArray.Length)
      FLUJO.Close()
      Dim Response As HttpWebResponse = Conexion.GetResponse()
      FLUJO = Response.GetResponseStream()
      Dim LEER As New StreamReader(FLUJO)
      Dim ServerResponse As String = LEER.ReadToEnd()
      ''MsgBox("Notificación enviada exitosamente", MsgBoxStyle.Information)
      LEER.Close()
      FLUJO.Close()
      Response.Close()
      

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2016-07-12
      相关资源
      最近更新 更多