2013-06-12 33 views
0

我想,讀出通過加載該頁面稱爲JSON響應空響應:http://www.nzracing.co.nz/RaceInfo.aspx以JSON調用(vb.net)

Fiddler2顯示該網頁獲得的JSON內容從http://www.nzracing.co.nz/ServerScript/RaceInfo.aspx/GetCalendarEvents,傳遞開始和結束日期 - 例如{'start':'2013年5月26日','end':'07-Jul-2013'}

我試圖檢索這個內容,但是我得到的只是一個空字符串。這是我的功能:

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" 

仍然沒有差異。然後我注意到有一種cookie與某種sessionid。所以我說,當我在我的瀏覽器加載它,我有值:

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

還是什麼都沒有,所以我編程方式檢索到的原始頁面,得到了CookieCollection並通過了整個CookieCollection這裏的請求。依然沒有。

我很明顯錯過了一些相當重要的東西,但我無法弄清楚什麼是錯的。

進一步看,(我無法引用,因爲我是一個新用戶的頁面)建議我有我的網址& 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']}" 

Hooray!我得到一個迴應。但這只是我第一次提到的原始頁面的html。不是我在Fiddler2中看到的json響應。仍然不正確。

幫助?爲什麼我沒有得到我期待的json響應?

乾杯

回答

1

您是否嘗試過使用WebClient.UploadString(以及任何WebClient Methods)?它們通常比WebRequest和Stream更容易。

Dim WC as New Net.WebClient 
Dim responseText as String = WC.UploadString(url, json) 
+0

哇,是的 - 這簡單得多。但是相同的結果 - 一個空字符串。 – Scott

+0

只需添加內容類型即可。這個對我有用。 WC.Headers(「Content-Type」)=「application/json」 – Jamby

+0

Legend!非常感謝。 – Scott

0

您正在使用POST作爲您的請求方法。通常,當您想要更改服務器上的內容時,會使用帖子。如果您只是從服務器請求信息,則使用GET。

你得到了什麼HTTP狀態碼?

+0

我得到一個狀態200(OK):

理所應當的那樣簡單。 如果我從POST更改爲GET,request.GetRequestStream()將拋出一個異常「無法使用此謂詞類型發送內容主體」 – Scott