0

我正在尝试检索通过加载此页面调用的 json 响应:http ://www.nzracing.co.nz/RaceInfo.aspx

Fiddler2 显示此页面从http://www.nzracing.co.nz/ServerScript/RaceInfo.aspx/GetCalendarEvents获取 json 内容,传递开始和结束日期 - 例如 {'start':'26-May-2013', “结束”:“2013 年 7 月 7 日”}

我正在尝试检索此内容,但我得到的只是一个空字符串。这是我的功能:

Public Function GetPage() As String

    Dim url As String = "http://www.nzracing.co.nz/ServerScript/RaceInfo.aspx/GetCalendarEvents"
    Dim json As String = "{'start':'26-May-2013', 'end':'07-Jul-2013'}"
    Dim request As HttpWebRequest = WebRequest.Create(url)

    request.ContentType = "text/json"
    request.Method = "POST"

    Dim streamWriter = New StreamWriter(request.GetRequestStream())
    streamWriter.Write(json)

    Dim httpResponse As HttpWebResponse = request.GetResponse()

    Dim streamReader As StreamReader = New StreamReader(httpResponse.GetResponseStream())
    Dim responseText = streamReader.ReadToEnd()

    Return responseText
End Function

responseText 是一个空字符串。过去当我检索网页内容(传统的 get/post,以前没有 json)时,有时需要引用者,所以我尝试添加

    request.Referer = "http://www.nzracing.co.nz/RaceInfo.aspx"

还是没有区别。然后我注意到有一个带有某种 sessionid 的 cookie。所以我添加了我在浏览器中加载它时的值:

    request.CookieContainer = New CookieContainer()
    request.CookieContainer.Add(New Uri("http://www.nzracing.co.nz"), New Cookie("ASP.NET_SessionId", "1udhwsgqwqzv4innpp4noxao"))

仍然没有,所以我以编程方式检索原始页面,获取 CookieCollection 并将整个 CookieCollection 传递给此处的请求。依然没有。

我显然在这里遗漏了一些相当基本的东西,但我无法找出问题所在。

进一步看,(由于我是新用户而无法引用的页面)表明我的 url 和 json 字符串错误。所以我把这些改成

Dim url As String = "http://www.nzracing.co.nz/ServerScript/RaceInfo.aspx"
Dim json As String = "{'method':GetCalendarEvents', 'params':['start':'26-May-2013', 'end':'07-Jul-2013']}"

万岁!我得到回应。但这只是我第一次提到的原始页面的html。不是我在 Fiddler2 中看到的 json 响应。那时候还是不行。

帮助?为什么我没有得到我期望的 json 响应?

干杯

4

2 回答 2

1

您是否尝试过使用WebClient.UploadString(以及任何WebClient Methods)?它们通常比 WebRequest 和 Stream 更容易。

它应该很简单:

Dim WC as New Net.WebClient
Dim responseText as String = WC.UploadString(url, json)
于 2013-06-12T12:29:48.303 回答
0

您正在使用 POST 作为您的请求方法。通常,当您想更改服务器上的某些内容时,会使用帖子。如果您只是从服务器请求信息,则使用 GET。

你得到什么 HTTP 状态码?

于 2013-06-12T10:59:51.833 回答