68 votes

Comment faire un HTTP Put ?

J'ai l'impression d'être un idiot en posant cette question. En fait, après avoir tapé le titre, StackOverflow m'aboie dessus : "Ce n'est pas un très bon titre. Pouvez-vous y ajouter des mots plus uniques ?" Non je ne peux pas, SO ; désolé. Nous y voilà :

Nous avons ce logiciel qui a un composant webservices.

L'administrateur de ce système est venu me voir pour importer des données dans le système en utilisant le composant webservices.

J'ai donc lu la documentation pour essayer de résoudre ce problème et je vois des choses comme celles-ci :


~~Cliquez ici pour voir de quoi je parle (l'affichage est meilleur dans firefox, chrome et safari).

~~

Cette documentation donne des exemples d'interaction avec le système en utilisant des verbes HTTP tels que GET, POST, PUT, DELETE. Mais dans mon expérience limitée, je n'ai jamais eu à envoyer ni un HTTP PUT ni un DELETE.

Comment faites-vous ? J'ai construit des formulaires HTML avec method="post" ou method="get" et la requête est envoyée à ce qui est spécifié dans l'attribut action (action="someResource"). Mais je ne sais pas vraiment quoi faire avec cette méthode PUT.

Si je devais deviner, je devrais construire une application qui crée une sorte d'objet de requête HTTP, en définir toutes les propriétés et inclure d'une manière ou d'une autre les données que je veux placer dans la ressource (


~~J'essaie d'utiliser la terminologie REST, ce qui est très nouveau pour moi.

~~). Ensuite, j'enverrais la demande en utilisant mon langage de programmation et bla bla bla. Je ne fais que spéculer sur ce sujet. N'hésitez pas à m'aider !

Je pensais être un développeur web, puisque je connais des choses comme XHTML, CSS, JavaScript, etc., mais il semble que je ne connaisse rien du tout aux fondements du web (HTTP).

Merci.

EDIT

PS : Je programme principalement avec .net. Donc, tout exemple en .net serait génial.

23voto

Jason DeFontes Points 1702

Voici un exemple en C# utilisant HttpWebRequest :

using System;
using System.IO;
using System.Net;

class Test
{
        static void Main()
        {
                string xml = "<xml>...</xml>";
                byte[] arr = System.Text.Encoding.UTF8.GetBytes(xml);
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/");
                request.Method = "PUT";
                request.ContentType = "text/xml";
                request.ContentLength = arr.Length;
                Stream dataStream = request.GetRequestStream();
                dataStream.Write(arr, 0, arr.Length);
                dataStream.Close();
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                string returnString = response.StatusCode.ToString();
                Console.WriteLine(returnString);
        }
}

Mise à jour il y a maintenant une classe HttpClient dans System.Net.Http ( disponible sous forme de paquet NuGet ) qui rend la chose un peu plus facile :

using System;
using System.Net.Http;

class Program
{
    static void Main()
    {
        var client = new HttpClient();
        var content = new StringContent("<xml>...</xml>");
        var response = client.PutAsync("http://localhost/", content).Result;
        Console.WriteLine(response.StatusCode);
    }
}

15voto

tvanfosson Points 268301

PUT et DELETE nécessiteront probablement que vous utilisiez AJAX et fassiez des requêtes XMLHttpRequests puisque la balise FORM ne prend en charge que les verbes GET et POST et que les liens ne font que des requêtes GET.

Avec jQuery :

 $.ajax( {
       url: '/controller/action',
       type: 'PUT',
       data: function() { ...package some data as XML },
       dataType: 'xml',
       ... more options...
 );

La note sur le Options ajax de jQuery prévient que certains navigateurs ne prennent pas en charge les requêtes de type PUT et DELETE. Pour information, je n'ai jamais utilisé PUT mais j'ai utilisé DELETE dans IE et FF. Je n'ai pas testé dans Safari ou Opera.

8voto

Tony Points 6793

Voici comment le faire en CURL : Comment utiliser cURL pour tester RESTful Rails ?

Ou... vous pouvez tout à fait utiliser un formulaire HTML. Si l'application est vraiment RESTful, elle comprendra les actions REST et ne vous laissera exécuter que certaines actions en fonction de la méthode utilisée.

6voto

Brian Agnew Points 143181

Vous ne pouvez pas utiliser PUT en utilisant un formulaire HTML (la spécification définit seulement GET/POST pour les formulaires).

Cependant, toute API HTTP devrait vous permettre de faire du PUT, de la même manière qu'elle vous permet de faire du GET ou du POST. Par exemple, voici la documentation de Java HTTPClient qui détaille PUT ainsi que tous les autres verbes HTTP.

Je ne sais pas quel langage vous utilisez, mais je pense qu'il sera assez facile d'écrire une application pour exécuter un HTTP PUT.

6voto

Ronnie Overby Points 11402

J'ai trouvé ce logiciel gratuit vraiment cool appelé RESTClient .

Il vous permet d'interagir avec les ressources HTTP en utilisant divers verbes, en définissant manuellement les en-têtes et le corps, en définissant les informations d'authentification, le ssl, en exécutant des scripts de test, etc.

Cela m'aidera à comprendre comment interagir avec notre logiciel de "webservices" qui n'est en fait qu'une API RESTful vers la base de données du logiciel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X