簡體   English   中英

你怎么做HTTP Put?

[英]How do you do an 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中的任何例子都會非常棒。

這是使用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並生成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選項頁面的注釋警告某些瀏覽器不支持請求類型的PUT和DELETE。 FWIW,我從未使用PUT但在IE和FF中使用了DELETE。 尚未在Safari或Opera中測試過。

以下是如何在CURL中執行此操作: 如何使用cURL來測試RESTful Rails

或者......你絕對可以使用HTML表單。 如果應用程序是真正的REST,它將理解REST操作,並且只允許您根據您使用的方法執行某些操作。

您不能使用HTML表單進行PUT(規范定義表單的GET / POST )。

但是,任何HTTP API都應該允許您進行PUT,就像它允許您進行GET或POST一樣。 例如, 這里是Java HTTPClient文檔 ,它詳細說明了PUT以及所有其他HTTP謂詞。

我不知道你正在使用哪種語言,但我認為編寫一個應用程序來執行HTTP PUT會非常簡單。

我發現這個非常酷的免費軟件稱為RESTClient

它允許您使用各種動詞與HTTP資源進行交互,手動設置標題和正文,設置身份驗證信息,ssl,運行測試腳本等。

這將幫助我弄清楚如何與我們的“webservices”軟件進行交互,該軟件實際上只是軟件數據庫的RESTful API。

關於給libcurl.NET嘗試如何: http://sourceforge.net/projects/libcurl-net/

是一個允許您拖放到PUT文件的工具

“現在,這個系統的管理員來找我,希望通過使用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”。

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

由於各種原因,一些網絡管理員阻止投放。 所以你可能不得不使用POST而不是PUT。 檢查您的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM