Xml 如何进行HTTP Put?

Xml 如何进行HTTP Put?,xml,web-services,http,rest,put,Xml,Web Services,Http,Rest,Put,我们有这个软件,它有一个webservices组件 现在,这个系统的管理员来找我,希望通过使用webservices组件将数据导入到系统中 因此,我去阅读文档,试图弄明白这件事,我看到了如下情况: 该文档给出了使用HTTP谓词(如GET、POST、PUT、DELETE)与系统交互的示例。但以我有限的经验,我从来没有发送过HTTP PUT或DELETE 你是怎么做到的?我构建了包含method=“post”或method=“get”的HTML表单,请求被发送到action属性(action=“s

我们有这个软件,它有一个webservices组件


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

因此,我去阅读文档,试图弄明白这件事,我看到了如下情况:



该文档给出了使用HTTP谓词(如GET、POST、PUT、DELETE)与系统交互的示例。但以我有限的经验,我从来没有发送过HTTP PUT或DELETE

你是怎么做到的?我构建了包含method=“post”或method=“get”的HTML表单,请求被发送到action属性(action=“someResource”)中指定的任何对象。但我真的不知道该怎么处理这件事

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

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

我原以为自己是一名web开发人员,因为我知道XHTML、CSS、JavaScript等,但现在看来我对web的基础(HTTP)一无所知

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

仅仅是一些网络管理员出于各种原因阻止的一个例子。因此,你可能不得不使用POST而不是PUT。检查您的操作。

以下是如何在CURL中执行此操作:


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

是一种工具,允许您拖放文件,以放置无法使用HTML表单放置的文件。

(规范为表单定义)

但是,任何HTTP API都应该允许您以与获取或发布相同的方式进行放置。例如,其中的详细信息与所有其他HTTP谓词放在一起


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

PUT和DELETE可能要求您使用AJAX并生成XMLHttpRequests,因为表单标记只支持GET和POST谓词,而链接只支持GET请求

使用jQuery:

 $.ajax( {
       url: '/controller/action',
       type: 'PUT',
       data: function() { ...package some data as XML },
       dataType: 'xml',
       ... more options...
 );
页面上的注释警告某些浏览器不支持请求类型的PUT和DELETE。FWIW,我从来没有使用过PUT,但在IE和FF中使用过DELETE。尚未在Safari或Opera中进行测试。

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

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

Web服务请求要么通过Javascript(如Ajax)完成,要么通过应用程序完成

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

例如,下面是一些示例VB代码:

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

下面是一个使用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.IO;
Net系统;
课堂测试
{
静态void Main()
{
字符串xml=“…”;
byte[]arr=System.Text.Encoding.UTF8.GetBytes(xml);
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(“http://localhost/");
request.Method=“PUT”;
request.ContentType=“text/xml”;
request.ContentLength=阵列长度;
Stream dataStream=request.GetRequestStream();
dataStream.Write(arr,0,arr.Length);
dataStream.Close();
HttpWebResponse=(HttpWebResponse)request.GetResponse();
string returnString=response.StatusCode.ToString();
Console.WriteLine(返回字符串);
}
}
更新:System.Net.Http()中现在有了一个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);
    }
}
使用系统;
使用System.Net.Http;
班级计划
{
静态void Main()
{
var client=新的HttpClient();
var content=新的StringContent(“…”);
var response=client.PutAsync(“http://localhost/“,内容)。结果;
Console.WriteLine(响应状态码);
}
}

我发现了一款非常酷的免费软件,名为

它允许您使用各种谓词与HTTP资源交互,手动设置头和主体,设置身份验证信息、ssl、运行测试脚本等


这将帮助我了解如何与我们的“Web服务”软件交互,它实际上只是软件数据库的RESTful API。

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


更新:PUT和DELETE不再是HTML5表单的一部分。请参阅:

试试libcurl.NET如何:

将api作为chrome扩展进行测试

这一切都将发生在我们的局域网内。我不必担心它会被阻止。我喜欢网络管理员阻止合法HTTP的方式。我们能让他们允许Ajax真是个奇迹!如果使用HTML表单(我想尝试一下,只是为了教育/概念验证),如何将XML发送回服务器?在这里获取windows的curl:(不要介意url中令人生畏的haxx!)查看tvanfosson的评论。它显示了发出PUT请求的好方法。然后应该返回XML…?我对拖放文件以上传到服务器不感兴趣。我想用