How do you do an HTTP Put?

81,780

Solution 1

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

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

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

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 5

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.

Share:
81,780
MsBao
Author by

MsBao

Updated on November 13, 2020

Comments

  • MsBao
    MsBao over 3 years

    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.

  • MsBao
    MsBao about 15 years
    This is all going to occur inside our LAN. I wont have to worry about it being blocked.
  • MsBao
    MsBao about 15 years
    If using an HTML form (which I would like to try just for education/proof of concept) how do I send the XML back to the server?
  • cgp
    cgp about 15 years
    Get curl for windows here: curl.haxx.se/download.html (don't mind the intimidating haxx in the url!)
  • MsBao
    MsBao about 15 years
    I'm not interested in dragging and dropping files to upload to a server. I want to use the HTTP put method to send xml to a server.
  • runako
    runako about 15 years
    Gotta love how network admins block legitimate HTTP. It's a wonder we can get them to allow Ajax at all!
  • Yishai
    Yishai about 15 years
    If the file were XML, then that's what it would do.
  • MsBao
    MsBao about 15 years
    I will likely not write the code to solve this problem for use on a web server/web browser. Likely, I will write a console/windows app that reads data from a database/spreadsheet, then creates some xml to PUT/POST/FART or whatever back to the server in an HTTP request. The purpose of my question here is just to get some information on executing these unfamiliar verbs. HAHAHAHA
  • Abhinav Kaushal Keshari
    Abhinav Kaushal Keshari about 15 years
    Look at the comment by tvanfosson. It shows a good way to make a PUT request. And then XML should be returned...?
  • MsBao
    MsBao about 15 years
    This looks very promising. I will try this out. Thanks
  • sameer yadav
    sameer yadav over 14 years
    You could always just have a hidden field that has a hidden "method" field when accessing your rest api through an html form
  • user141682
    user141682 over 14 years
    HttpWebRequest doesn't support verbs other than GET or POST. Setting Method to "PUT" will throw a NotSupportedException (sucks, I know!) - msdn.microsoft.com/en-us/library/…
  • Jason DeFontes
    Jason DeFontes over 14 years
    @Luke It's only on Silverlight that PUT is not supported (your link is to the Silverlight docs). The code above runs as written otherwise.
  • user141682
    user141682 about 14 years
    thanks! I didn't realise this. I've since found the HttpClient class from the WCF Rest Toolkit which is fantastic.
  • Julian Reschke
    Julian Reschke about 13 years
    PUT and DELETE aren't in HTML5 either (anymore).
  • Mese
    Mese about 6 years
    It's 2018, this is still relevant because you made is so easy + clear. What I was thinking is why we use client.PutAsync() instead of PutAsXmlAsync()