web-dev-qa-db-fra.com

Comment faites-vous un put HTTP?

Nous avons ce logiciel qui a un composant webservices.

Maintenant, l'administrateur de ce système est venu me voir, souhaitant importer des données dans le système en utilisant le composant webservices.

Donc, je suis allé lire la documentation pour essayer de comprendre cette chose et je vois des choses comme ça:


Cliquez ici pour voir de quoi je parle (cela semble mieux dans Firefox, Chrome et Safari)

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

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

Si je devais deviner, je devrais créer une application qui crée une sorte d'objet de requête HTTP et définir toutes les propriétés de celui-ci et inclure en quelque sorte les données que je veux METTRE dans la RESSOURCE (


J'essaie d'utiliser REST terminologie, ce qui est autre chose est très nouveau pour moi

Je pensais que j'étais un développeur Web, car je connais des choses comme XHTML, CSS, JavaScript, etc., mais il semble que je ne sache rien des fondements du Web (HTTP).

MODIFIER

PS: je programme principalement avec .net. Donc, tous les exemples en .net seraient assez impressionnants.

68
Ronnie Overby

Voici un exemple 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 en tant que package NuGet ) qui en fait 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);
    }
}
23
Jason DeFontes

PUT et DELETE sont susceptibles de nécessiter l'utilisation de AJAX et de faire XMLHttpRequests car la balise FORM ne prend en charge que GET et POST les verbes et 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 la page options jQuery ajax prévient que certains navigateurs ne prennent pas en charge PUT et DELETE pour le type de demande. FWIW, je n'ai jamais utilisé PUT mais j'ai utilisé DELETE dans IE et FF. N'ont pas été testés dans Safari ou Opera.

15
tvanfosson

Voici comment le faire dans CURL: Comment utiliser cURL pour tester les rails RESTful

Ou ... vous pouvez certainement utiliser un formulaire HTML. Si l'application est vraiment RESTful, elle comprendra les actions REST et ne vous permettra d'effectuer que certaines actions en fonction de la méthode que vous utilisez.

8
Tony

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

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

Cela m'aidera à comprendre comment interagir avec notre logiciel "webservices" qui est vraiment juste une API RESTful à la base de données du logiciel.

6
Ronnie Overby

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

Cependant, toute API HTTP devrait vous permettre de PUT, de la même manière qu'elle vous permet d'obtenir ou de poster. Par exemple, voici la Java HTTPClient , qui détaille PUT avec tous les autres verbes HTTP.

Je ne sais pas quelle langue vous utilisez, mais je pense que ça va être assez trivial d'écrire une application pour effectuer un HTTP PUT.

6
Brian Agnew
2
everconfusedGuy

"Maintenant, l'administrateur de ce système est venu me voir, souhaitant importer des données dans le système en utilisant le composant webservices."

Les services Web ont peu à voir avec les formulaires HTML.

Les demandes de services Web sont effectuées à partir de Javascript (par exemple, comme Ajax) ou à partir de vos programmes d'application.

Vous écririez un programme C # ou VB qui utilisait HTTP pour effectuer un Put vers l'URL de services Web donnée avec l'ensemble de données donné.

Voici, par exemple, un exemple VB: http://developer.yahoo.com/dotnet/howto-rest_vb.html#post

Remplacez la chaîne de méthode de "POST" par "PUT".

1
S.Lott

Que diriez-vous d'essayer libcurl.NET: http://sourceforge.net/projects/libcurl-net/

1
user141682

ici est un outil qui vous permet de glisser-déposer vers des fichiers PUT

1
Yishai

Juste un avertissement, certains administrateurs réseau bloquent les sorties pour diverses raisons. Vous devrez donc peut-être utiliser un POST au lieu de PUT. Vérifiez avec vos opérations.

0
Srikar Doddi

PUT et DELETE ne font pas partie de HTML4, mais sont inclus dans les spécifications HTML5. Pour cette raison, la plupart des navigateurs populaires ne les prennent pas en charge correctement, car ils se concentrent sur HTML4. Cependant, ils font définitivement partie de HTTP et l'ont toujours été. Vous effectuez un PUT en utilisant un client non navigateur, ou en utilisant un formulaire dans un navigateur compatible HTML5.

Mise à jour: PUT et DELETE ne font plus partie de HTML5 pour les formulaires. Voir: http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fs-method

0
aehlke