你如何做一个HTTP Put?

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

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

所以,我去阅读文档,试图找出这个东西,我看到这样的事情:


点击这里查看我在说什么(这在firefox,chrome和safari中看起来最好)


该文档给出了使用HTTP动词(如GET,POST,PUT,DELETE)与系统进行交互的示例。 但是在我有限的经验中,我从来不需要发送HTTP PUT或DELETE。

你怎么做呢? 我构build了具有method =“post”或method =“get”的HTML表单,并将请求发送给action属性(action =“someResource”)中指定的任何内容。 但我真的不知道该怎么做这件事。

如果我不得不猜测,我将不得不build立一个应用程序,创build某种HTTP请求对象,并设置它的所有属性,并以某种方式包含我想要放置到资源的数据(


我正在尝试使用REST术语,这对我来说是另一回事


)。 然后我会用我的编程语言发送请求,等等等等。 我只是在猜测这个。 请提供一些帮助!

我以为我是一个Web开发人员,因为我知道的东西像XHTML,CSS,JavaScript等,但它开始看起来像我根本不了解网站的基础(HTTP)。

编辑

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

这是一个使用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中有一个HttpClient类( 作为一个NuGet包提供 ),使得这个更简单一些:

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

PUT和DELETE很可能要求您使用AJAX并创buildXMLHttpRequests,因为FORM标记只支持GET和POST动词,而链接只能发出GET请求。

使用jQuery:

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

jQuery ajax选项页面上的提示警告说,某些浏览器不支持请求types的PUT和DELETE。 FWIW,我从来没有使用PUT,但在IE和FF中使用了DELETE。 尚未在Safari或Opera中进行testing。

以下是如何在CURL中执行此操作的方法: 如何使用cURL来testingRESTful Rails

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

你不能使用HTML表单(该规范只定义了表单的GET / POST )。

但是,任何HTTP API都应该允许你PUT,就像它允许你GET或POST一样。 例如,下面是Java HTTPClient文档 ,其中详细介绍了PUT以及所有其他HTTP动词。

我不知道你正在使用哪种语言,但是我认为编写一个应用程序来执行一个HTTP PUT将会非常简单。

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

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

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

这里是一个工具,让你拖放到PUT文件

“现在,这个系统的pipe理员来找我了,想要通过使用webservices组件将数据导入到系统中。”

Web服务与HTML表单无关。

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

您将编写一个C#或VB程序,使用HTTP对指定的一组数据进行Put处理。

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

将“POST”的方法stringreplace为“PUT”。

给libcurl.NET一个尝试如何: http : //sourceforge.net/projects/libcurl-net/

只是提出一些networkingpipe理员块出于各种原因。 所以你可能不得不使用POST而不是PUT。 检查您的操作。

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

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