0

Windows Phone アプリを作成しており、URL から JSON データを取得しようとしています。ユーザーは、JSON データを取得するために Web サイト (JSON データをホストする) にログインする必要があります。Web ブラウザー コントロールを使用してデータを表示し、ブラウザーが文字列を認識しないため、文字列を抽出することはできません (一部の場合)。奇妙な理由)、そのJSONファイルタイプを処理できるStoreでアプリを検索するように求めます。(Windows PC のデスクトップ ブラウザーで URL を開くと、生の JSON データが表示されます)。JSON データを取得するには、ログイン Cookie を設定する必要があるため (JSON データはユーザー固有です)、通常の HTTPWebRequest または WebClient を使用できません。また、Web ブラウザー コントロールから Cookie を抽出して WebClient または HTTPWebRequest で使用することもできません。したがって、私ができる最善のことは、WebBrowser によって内部的に使用される IWebRequestCreate の特別な内部インスタンスを使用することです。そのクラスでバックグラウンド HTTP 要求を開くことにより、Cookie は WebBrowser コントロールによって作成/送信されたかのように自動的に設定されます。しかし、私のコードは JSON データを返していません。文字列のように空白の応答が返されます。応答は空です。

以下はコードです:

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

どうしたの?

4

1 に答える 1

1

CopyTo がストリームのポインターをバッファーの最後に残すことができることがわかりました。おそらく、StreamReader で読み取ろうとする前に、tempStream のポインターを最初にリセットする必要があります。コードは次のとおりです...

webResponse.GetResponseStream().CopyTo(tempStream);

tempStream.Seek(0, SeekOrigin.Begin);

Dim sr As New StreamReader(tempStream);
于 2013-06-20T10:02:44.883 に答える