How do you do an HTTP Put?

XmlWeb ServicesHttpRestPut

Xml Problem Overview


We have this software that has a webservices component.

Now, the administrator of this system has come to me, wanting to import data into the system by using the webservices component.

So, I went to read the documentation to try to figure this thing out and I am seeing things like this:


Click here to see what I'm talking about (this looks best in firefox, chrome, & safari)

That documentation gives examples of interacting with the system using HTTP verbs such as GET, POST, PUT, DELETE. But in my limited experience, I have never had to send neither an HTTP PUT nor a DELETE.

How do you do it? I have built HTML forms that have method="post" or method="get" and the request is sent to whatever is specified in the action attribute (action="someResource"). But I don't really know what to do with this PUT thing.

If I had to guess, I would have to build an application that creates some sort of an HTTP Request object and set all the properties of it and somehow include the data I want to PUT to the RESOURCE (


I am trying to use REST terminology, which is something else is very new to me
). Then I would send the request using my programming language and blah blah blah. I am just speculating on this. Please offer up some assistance!

I thought that I was a web developer, since I know things like XHTML, CSS, JavaScript, etc. but it's starting to look like I don't know anything about the foundations of the web at all (HTTP).

EDIT

PS: I program mostly with .net. So, any examples in .net would be pretty awesome.

Xml Solutions


Solution 1 - Xml

Here's a C# example using 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);
        }
}

Update: there's now an HttpClient class in System.Net.Http (available as a NuGet package) that makes this a bit easier:

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);
    }
}

Solution 2 - Xml

PUT and DELETE are likely to require that you use AJAX and make XMLHttpRequests since the FORM tag only supports GET and POST verbs and links only make GET requests.

With jQuery:

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

The note on the jQuery ajax options page warns that some browsers don't support PUT and DELETE for the request type. FWIW, I've never used PUT but have used DELETE in IE and FF. Haven't tested in Safari or Opera.

Solution 3 - Xml

Here is how to do it in CURL: How to Use cURL to Test RESTful Rails

Or...you can definitely use an HTML form. If the app is truly RESTful, it will understand the REST actions and only let you perform certain actions based on the method you use.

Solution 4 - Xml

You can't PUT using an HTML form (the spec defines only GET/POST for forms).

However any HTTP API should allow you to PUT, in the same way that it allows you to GET or POST. For example, here's the Java HTTPClient documentation, which details PUT alongside all the other HTTP verbs.

I don't know which language you're using, but I think it's going to be pretty trivial to write an app to perform an HTTP PUT.

Solution 5 - Xml

I found this really cool piece of free software called RESTClient.

It lets you interact with HTTP resources using various verbs, manually setting headers and the body, setting authentication info, ssl, running test scripts, etc.

This will help me to figure out how to interact with our "webservices" software which is really just a RESTful API to the software's database.

Solution 6 - Xml

Solution 7 - Xml

Here is a tool that lets you drag and drop to PUT files

Solution 8 - Xml

"Now, the administrator of this system has come to me, wanting to import data into the system by using the webservices component."

Web services have little to do with HTML forms.

Web services requests are either done from Javascript (e.g., as Ajax) or they're done from your application programs.

You would write a C# or VB program that used HTTP to do a Put to the given web services URL with the given set of data.

Here, for instance, is some sample VB code: http://developer.yahoo.com/dotnet/howto-rest_vb.html#post

Replace the method string of "POST" with "PUT".

Solution 9 - Xml

How about giving libcurl.NET a try: http://sourceforge.net/projects/libcurl-net/

Solution 10 - Xml

Just a headsup some network admins block puts for various reasons. So you may have to use a POST instead of PUT. Check with your operations.

Solution 11 - Xml

PUT and DELETE are not part of HTML4, but are included in the HTML5 specifications. For this reason, most popular browsers don't have good support for them, since they focus on HTML4. However, they are definitely part of HTTP and always have been. You do a PUT using some non-browser client, or using a form in an HTML5-ready browser.

Update: PUT and DELETE are no longer part of HTML5 for forms. See: http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fs-method

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRonnie OverbyView Question on Stackoverflow
Solution 1 - XmlJason DeFontesView Answer on Stackoverflow
Solution 2 - XmltvanfossonView Answer on Stackoverflow
Solution 3 - XmlTonyView Answer on Stackoverflow
Solution 4 - XmlBrian AgnewView Answer on Stackoverflow
Solution 5 - XmlRonnie OverbyView Answer on Stackoverflow
Solution 6 - XmleverconfusedGuyView Answer on Stackoverflow
Solution 7 - XmlYishaiView Answer on Stackoverflow
Solution 8 - XmlS.LottView Answer on Stackoverflow
Solution 9 - Xmluser141682View Answer on Stackoverflow
Solution 10 - XmlSrikar DoddiView Answer on Stackoverflow
Solution 11 - XmlaehlkeView Answer on Stackoverflow