你怎么做HTTP Put?

时间:2009-05-01 18:51:12

标签: xml web-services http rest put

我们这个软件有一个webservices组件。

现在,这个系统的管理员来找我,希望使用webservices组件将数据导入系统。

所以,我去阅读文档试图解决这个问题,我看到的是这样的事情:

<击>

<小时/> <击> Click here to see what I'm talking about (this looks best in firefox, chrome, & safari)

该文档提供了使用HTTP动词(如GET,POST,PUT,DELETE)与系统交互的示例。但在我有限的经验中,我从未发送过HTTP PUT或DELETE。

你是怎么做到的?我已经构建了具有method =“post”或method =“get”的HTML表单,并且请求被发送到action属性中指定的任何内容(action =“someResource”)。但我真的不知道如何处理这个PUT事情。

如果我不得不猜测,我将不得不构建一个创建某种HTTP Request对象的应用程序并设置它的所有属性,并以某种方式包含我想要PUT到RESOURCE的数据(

<小时/> <击> I am trying to use REST terminology, which is something else is very new to me
)。然后我会用我的编程语言发送请求,等等等等。我只是在猜测这一点。请提供一些帮助!

我认为我是一名网络开发人员,因为我知道XHTML,CSS,JavaScript等等,但它开始看起来像我根本不了解网络的基础(HTTP)。 / p>

修改

PS:我主要用.net编程。所以,.net中的任何例子都会非常棒。

11 个答案:

答案 0 :(得分:23)

这是使用HttpWebRequest的C#示例:

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

更新:现在System.Net.Http(available as a NuGet package)中有一个HttpClient类,可以让它更容易一些:

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

答案 1 :(得分:15)

PUT和DELETE可能要求您使用AJAX并生成XMLHttpRequests,因为FORM标记仅支持GET和POST动词,而链接仅发出GET请求。

使用jQuery:

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

jQuery ajax options页面上的注释警告某些浏览器不支持请求类型的PUT和DELETE。 FWIW,我从未使用PUT但在IE和FF中使用了DELETE。尚未在Safari或Opera中测试过。

答案 2 :(得分:8)

以下是如何在CURL中执行此操作:How to Use cURL to Test RESTful Rails

或者......你绝对可以使用HTML表单。如果应用程序是真正的REST,它将理解REST操作,并且只允许您根据您使用的方法执行某些操作。

答案 3 :(得分:6)

您不能使用HTML表单进行PUT(规范为表单定义only GET/POST)。

然而,任何HTTP API都应该允许您进行PUT,就像它允许您进行GET或POST一样。例如,here's the Java HTTPClient documentation,其中详细说明了PUT以及所有其他HTTP谓词。

我不知道您使用的是哪种语言,但我认为编写应用程序来执行HTTP PUT会非常简单。

答案 4 :(得分:6)

我发现这个名为RESTClient的免费软件非常酷。

它允许您使用各种动词与HTTP资源进行交互,手动设置标题和正文,设置身份验证信息,ssl,运行测试脚本等。

这将帮助我弄清楚如何与我们的“webservices”软件进行交互,该软件实际上只是软件数据库的RESTful API。

答案 5 :(得分:2)

答案 6 :(得分:1)

Here是一个可以拖放到PUT文件的工具

答案 7 :(得分:1)

“现在,这个系统的管理员来找我,希望使用webservices组件将数据导入系统。”

Web服务与HTML表单几乎没有关系。

Web服务请求可以通过Javascript(例如,作为Ajax)完成,也可以通过应用程序完成。

您可以使用HTTP编写一个C#或VB程序,使用给定的数据集对给定的Web服务URL执行Put。

例如,这里是一些示例VB代码:http://developer.yahoo.com/dotnet/howto-rest_vb.html#post

将“POST”的方法字符串替换为“PUT”。

答案 8 :(得分:1)

答案 9 :(得分:0)

由于各种原因,一些网络管理员阻止了。所以你可能不得不使用POST而不是PUT。检查您的操作。

答案 10 :(得分:0)

PUT和DELETE不是HTML4的一部分,但包含在HTML5规范中。出于这个原因,大多数流行的浏览器都没有很好的支持,因为它们专注于HTML4。但是,它们肯定是HTTP的一部分,而且一直都是。您可以使用某些非浏览器客户端或在支持HTML5的浏览器中使用表单来执行PUT。

更新:PUT和DELETE不再是表单HTML5的一部分。请参阅:http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fs-method