你怎么做HTTP Put?

Ron*_*rby 68 xml rest web-services http put

我们有这个有web服务组件的软件.

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

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


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

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

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

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


我正在尝试使用REST术语,这对我来说是另一回事
).然后我会用我的编程语言发送请求,等等等等.我只是在猜测这一点.请提供一些帮助!

我以为我是一名网络开发人员,因为我知道像XHTML,CSS,JavaScript等等,但它开始看起来像我根本不知道任何关于网络的基础(HTTP).

编辑

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

Jas*_*tes 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);
        }
}
Run Code Online (Sandbox Code Playgroud)

更新:现在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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Luke只有在Silverlight上才支持PUT(你的链接是Silverlight文档).上面的代码以其他方式编写. (8认同)

tva*_*son 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...
 );
Run Code Online (Sandbox Code Playgroud)

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


Ton*_*ony 8

以下是如何在CURL中执行此操作:如何使用cURL来测试RESTful Rails

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

  • 链接坏了请修复 (3认同)

Bri*_*new 6

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

但是,任何HTTP API都应该允许您进行PUT,就像它允许您进行GET或POST一样.例如,这里是Java HTTPClient文档,它详细说明了PUT以及所有其他HTTP谓词.

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


Ron*_*rby 6

我发现这个非常酷的免费软件称为RESTClient.

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

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