Visual Basic 2010 / .NET |快速POST请求Web

时间:2011-04-01 17:08:01

标签: .net vb.net http post

我正在编写一个必须通过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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

我仍然同意字符串连接和处理建议,并认为使用WebClient可以轻松实现代码。