Comment capturer la réponse JSON en utilisant le contrôle WebBrowser

J'affiche L'URL de réponse JSON du site Web en utilisant WebBrowser.Navigate().

Tout va bien, y compris l' webBrowser1_DocumentCompleted() appel au gestionnaire d'événements.

mais au lieu d'obtenir une réponse "calme" (par exemple webBrowser1.Document) que je peux gérer par programmation, je reçois un Téléchargement de Fichier boîte de dialogue:

enter image description here

Si je clique sur le Save bouton et, plus tard, examiner le dossier, il contient exactement la réponse JSON que j'attends.

Mais je veux le programme capturez cette réponse JSON en code, sans afficher ce dialogue et avoir à cliquer sur le Save bouton.

comment capturer la réponse JSON en utilisant le contrôle WebBrowser?

Remarque: avant de poster cette question j'ai cherché et tout ce que j'ai trouvé était une question similaire pour laquelle la réponse acceptée n'explique pas vraiment comment faire cela (je suis déjà en train de gérer webBrowser1_DocumentCompleted). Tout des conseils?

mise à Jour: toutes mes recherches jusqu'à présent n'ont rien donné en ce qui concerne l'utilisation du contrôle WebBrowser pour obtenir des réponses JSON. Peut-être que je me rapproche de cette complètement tort? Ce qui me manque?

15
demandé sur Community 2012-10-23 03:55:28

3 réponses

Ne pas utiliser WebBrowser pour JSON communication. Utilisez WebRequest au lieu de:

//
//    EXAMPLE OF LOGIN REQUEST 
//

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create a request using a URL that can receive a post. 
            WebRequest request = WebRequest.Create("http://getting-started.postaffiliatepro.com/scripts/server.php");
            // Set the Method property of the request to POST.
            request.Method = "POST";
            // Create POST data and convert it to a byte array.
            //WRITE JSON DATA TO VARIABLE D
            string postData = "D={\"requests\":[{\"C\":\"Gpf_Auth_Service\", \"M\":\"authenticate\", \"fields\":[[\"name\",\"value\"],[\"Id\",\"\"],[\"username\",\"user@example.com\"],[\"password\",\"ab9ce908\"],[\"rememberMe\",\"Y\"],[\"language\",\"en-US\"],[\"roleType\",\"M\"]]}],  \"C\":\"Gpf_Rpc_Server\", \"M\":\"run\"}";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            // Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length;
            // Get the request stream.
            Stream dataStream = request.GetRequestStream();
            // Write the data to the request stream.
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Close the Stream object.
            dataStream.Close();
            // Get the response.
            WebResponse response = request.GetResponse();
            // Display the status.
//            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Display the content.
            Console.WriteLine(responseFromServer);
            // Clean up the streams.
            reader.Close();
            dataStream.Close();
            response.Close();


        }
    }
}

Vous pouvez trouver plus de détails dans ce C# .NET communication with API article et ce fil.

9
répondu Not So Sharp 2017-05-23 11:46:11

j'ai le même problème que Scatmoi mais je ne peux pas utiliser une requête web à cause des exigences de connexion. J'ai essayé de modifier la réponse ci-dessus pour voir si je pouvais obtenir l'authentification de la connexion à passer, mais pas de chance.

mise à JOUR

je viens de trouver la solution qui fonctionne pour moi. Voir le lien suivant pour plus d'infos, mais juste au cas où j'ai collé la réponse ici. http://www.codeproject.com/Tips/216175/View-JSON-in-Internet-Explorer

besoin de voir Réponses de JSON dans IE? 1.Ouvrez le bloc-notes et collez ce qui suit:

Windows Registry Editor Version 5.00;
; Tell IE 7,8,9,10 to open JSON documents in the browser on Windows XP and later.
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

2.Enregistrer le document sous IE-Json.reg et ensuite le lancer.

Note: Ceci a été testé sur Windows XP et Windows 7 en utilisant IE 7, 8, 9, 10.

4
répondu gadildafissh 2013-08-12 14:07:28

la solution ci-dessus manquait deux choses, et le code ci-dessous devrait fonctionner dans chaque situation:

Windows Registry Editor Version 5.00
;
; Tell IE to open JSON documents in the browser.  
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;  

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/x-json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

il suffit de sauvegarder le fichier json.reg, et exécutez pour modifier votre registre.

3
répondu Tomasz Maj 2014-04-07 06:52:06