空响应HTTPWebRequest:Windows Phone 8

时间:2013-03-10 07:58:09

标签: vb.net json httpwebrequest windows-phone-8 windows-phone

我正在制作一个Windows Phone应用程序,我正在尝试从URL获取JSON数据。用户需要登录到网站(托管JSON数据)以获取JSON数据,我无法使用Web浏览器控件显示数据,然后提取字符串,因为浏览器无法识别它(对于某些人来说)奇怪的原因)并要求在商店上搜索可以处理该JSON文件类型的应用程序。 (如果我在Windows PC上的桌面浏览器中打开URL,我可以看到原始的JSON数据)。我无法使用普通的HTTPWebRequest或WebClient来获取需要设置登录cookie的JSON数据(JSON数据是用户特定的),我无法从Web浏览器控件中提取cookie并将其与WebClient或HTTPWebRequest一起使用。所以我能做的最好的事情是使用WebBrowser内部使用的IWebRequestCreate的特殊内部实例。通过使用该类打开后台HTTP请求,cookie会自动设置,就像它们是由WebBrowser控件创建/发送一样。但是我的代码没有返回JSON数据,我得到空白响应,因为字符串 resp 是空的。

以下是代码:

Dim browser = New WebBrowser()
Dim brwhttp = GetType(WebRequestCreator).GetProperty("BrowserHttp")
Dim requestFactory = TryCast(brwhttp.GetValue(Browser, Nothing), IWebRequestCreate)
Dim uri = New Uri("http://api.quora.com/api/logged_in_user?fields=inbox,notifs,following,followers")
Dim req = requestFactory.Create(uri)
req.Method = "GET"
req.BeginGetResponse(New AsyncCallback(AddressOf request_Callback), req)

Private Sub request_Callback(asyncResult As IAsyncResult)
Dim webRequest As HttpWebRequest = DirectCast(asyncResult.AsyncState, HttpWebRequest)
Dim webResponse As HttpWebResponse = DirectCast(webRequest.EndGetResponse(asyncResult), HttpWebResponse)
Dim tempStream As New MemoryStream()
webResponse.GetResponseStream().CopyTo(tempStream)
Dim sr As New StreamReader(tempStream)
Dim resp As String = sr.ReadToEnd
End Sub

怎么了?

1 个答案:

答案 0 :(得分:1)

我发现CopyTo可以将Stream的指针留在缓冲区的末尾,你可能需要在尝试使用StreamReader读取它之前将tempStream的指针重置为开头,这里是代码......

webResponse.GetResponseStream().CopyTo(tempStream);

tempStream.Seek(0, SeekOrigin.Begin);

Dim sr As New StreamReader(tempStream);