68

我们有这个具有 Web 服务组件的软件。

现在,这个系统的管理员来找我了,想通过webservices组件将数据导入系统。

所以,我去阅读文档试图弄清楚这件事,我看到了这样的事情:


单击此处查看我在说什么(这在 firefox、chrome 和 safari 中看起来最好)

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

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

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


我正在尝试使用 REST 术语,这对我来说是非常新的
)。然后我会使用我的编程语言和等等等等来发送请求。我只是在猜测这个。请提供一些帮助!

我以为我是一名 Web 开发人员,因为我知道 XHTML、CSS、JavaScript 等,但开始看起来我对 Web 的基础(HTTP)一无所知。

编辑

PS:我主要使用 .net 进行编程。因此,.net 中的任何示例都会非常棒。

4

11 回答 11

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 中现在有一个 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);
    }
}
于 2009-05-01T21:35:02.137 回答
15

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

使用 jQuery:

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

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

于 2009-05-01T19:07:48.030 回答
8

以下是在 CURL 中的操作方法:如何使用 cURL 测试 RESTful Rails

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

于 2009-05-01T18:56:26.527 回答
6

您不能 PUT 使用 HTML 表单(规范仅定义表单的 GET/POST)。

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

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

于 2009-05-01T19:07:39.043 回答
6

我发现这个非常酷的免费软件叫做RESTClient

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

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

于 2009-05-04T19:13:52.077 回答
2

将 api 测试为 chrome 扩展 https://chrome.google.com/webstore/detail/fdmmgilgnpjigdojojpjoooidkmcomcm

于 2012-09-17T10:58:25.850 回答
1

是一个工具,可让您拖放到 PUT 文件

于 2009-05-01T19:02:40.740 回答
1

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

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

Web 服务请求要么从 Javascript(例如,作为 Ajax)完成,要么从您的应用程序完成。

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

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

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

于 2009-05-01T19:29:42.500 回答
1

试试 libcurl.NET 怎么样:http: //sourceforge.net/projects/libcurl-net/

于 2010-02-10T07:01:23.033 回答
0

只是一些网络管理员出于各种原因阻止放置的提示。因此,您可能必须使用 POST 而不是 PUT。检查您的操作。

于 2009-05-01T18:53:09.420 回答
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

于 2009-07-20T22:21:17.930 回答