Question

J'essaie de créer une simple publication HTTP comme point de terminaison avec UNIQUEMENT des arguments url.

C'est du moins ce que j'ai compris des instructions suivantes:

  

POST à ??cette adresse avec un seul paramètre nommé url, l'adresse du flux ayant changé.

     

Comme avec la méthode XML-RPC, il vérifie que le flux a été modifié et, si tel est le cas, il en informe les abonnés.

     

L'événement est enregistré. La valeur de retour est un message XML nommé result, avec deux attributs, success et msg.

Ceci est mon code actuellement:

        public static void ping(string feed)
    {
        HttpWebResponse response = MakeRequest(feed);
        XmlDocument document = new XmlDocument();

        document.Load(response.GetResponseStream();
        string success = document.GetElementById("success").InnerText;
        string msg = document.GetElementById("msg").InnerText;

        MessageBox.Show(msg, success);
    }
        private static HttpWebResponse MakeRequest( string postArgument)
    {
        string url = path + "?" + UrlEncode(postArgument);
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        return (HttpWebResponse)request.GetResponse();
    }
    private static string UrlEncode( string value)
    {
        string result;
        result= HttpUtility.UrlEncode("url") + "=" + HttpUtility.UrlEncode(value);
        return result;
    }

Je reçois une réponse incorrecte de la part du serveur, donc je suppose que je me trompe quelque part. voici la réponse:

  

Invalide au niveau supérieur du document. Erreur lors du traitement de la ressource 'fichier: /// C: /Users/ADMIN/AppData/Local/Temp/VSD1.tmp.XML ...

     

rue   ^

Des idées?

Merci d'avance

Était-ce utile?

La solution 3

Voici le code que j'ai trouvé fonctionner.

Nous utilisons un HTTP POST, des paramètres de codage dans le corps du flux. Cela nous donne "url-foobar". en tant que corps du contenu. Aucun type de contenu, dispositions, limites, etc. dans le corps.

        private static HttpWebResponse MakeRequest(string path, string postArgument)
    {
        //string url = path + "?" + UrlEncode(postArgument);
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(path);

        request.Method = "POST";
        string boundary = Guid.NewGuid().ToString().Replace("-", "");
        request.ContentType = "multipart/form-data; boundary=" + boundary;
        Stream stream = request.GetRequestStream();
        string result = string.Format("url={0}", postArgument);
        byte[] value = Encoding.UTF8.GetBytes(result);
        stream.Write(value, 0, value.Length);
        stream.Close();

        return (HttpWebResponse)request.GetResponse();
    }
        public static void ping(string server, string feed)
    {
        HttpWebResponse response = MakeRequest(server, feed);
        XmlDocument document = new XmlDocument();
        string result = GetString(response.GetResponseStream());
        try
        {
            document.LoadXml(result);
        }
        catch
        {
            MessageBox.Show("There was an error with the response", "Error");
        }
        //MessageBox.Show(msg, success);

    }
    public static string GetString(Stream thestream)
    {
        int n = thestream.ReadByte();
        byte[] bytes = new byte[n];
        thestream.Read(bytes, 0, n);
        return Encoding.ASCII.GetString(bytes);
    }

Les appels à GetString sont uniquement destinés au débogage et ne sont pas strictement nécessaires.

Merci à tous ceux qui sont venus ici pour m'avoir mis sur la bonne voie.

Autres conseils

Je ne connais pas l'API de .NET, mais: je comprends les instructions: "exécute une publication sur l'URL avec les arguments de la requête", et le corps de la publication doit avoir le paramètre url = foobar.

IOW: au lieu de prendre le postArgument et de l'ajouter à l'URL, vous êtes censé appeler l'URL et fournir l'URL correctement encodée = foobar dans le corps du message.

De plus: je ne vois pas que vous définissiez l'en-tête de requête "Accepter", ce qui peut être important si le serveur l'utilise pour reconnaître le format de réponse.

La meilleure façon de publier des formulaires dans .NET consiste à utiliser la classe WebClient. Cette classe fera le nécessaire pour envoyer les données, en tant que POST (avec des paramètres dans le corps de l'entité) ou en tant que GET (avec des paramètres codés en tant qu'arguments de chaîne de requête).

Et vous devez nous montrer l'exception réelle que le client redonne, afin de comprendre ce qui ne va pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top