Как вы делаете HTTP Put? - PullRequest
68 голосов
/ 01 мая 2009

У нас есть это программное обеспечение с компонентом веб-сервисов.

Теперь ко мне пришел администратор этой системы, желая импортировать данные в систему с помощью компонента веб-сервисов.

Итак, я пошел читать документацию, чтобы попытаться выяснить это, и я вижу такие вещи:

Нажмите здесь, чтобы увидеть, о чем я говорю (лучше всего это выглядит в Firefox, Chrome и Safari)

В этой документации приведены примеры взаимодействия с системой с использованием HTTP-глаголов, таких как GET, POST, PUT, DELETE. Но из-за моего ограниченного опыта мне никогда не приходилось отправлять ни HTTP PUT, ни DELETE.

Как ты это делаешь? Я построил HTML-формы, которые имеют method = "post" или method = "get", и запрос отправляется тому, что указано в атрибуте action (action = "someResource"). Но я действительно не знаю, что делать с этим PUT.

Если бы мне пришлось угадывать, мне нужно было бы создать приложение, которое создает какой-то объект HTTP-запроса и устанавливает все его свойства и каким-то образом включает данные, которые я хочу ЗАСТАВИТЬ в RESOURCE (* 1018) * Я пытаюсь использовать терминологию REST, что является еще чем-то очень новым для меня ). Затем я бы отправил запрос, используя мой язык программирования и бла-бла-бла. Я просто размышляю об этом. Пожалуйста, предложите некоторую помощь!

Я думал, что я веб-разработчик, поскольку знаю такие вещи, как XHTML, CSS, JavaScript и т. Д., Но, похоже, я вообще ничего не знаю об основах Интернета (HTTP).

EDIT

PS: я программирую в основном на .net. Таким образом, любые примеры в .net были бы довольно удивительными.

Ответы [ 11 ]

23 голосов
/ 02 мая 2009

Вот пример C # с использованием HttpWebRequest:

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);
    }
}
15 голосов
/ 01 мая 2009

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 options предупреждает, что некоторые браузеры не поддерживают PUT и DELETE для типа запроса. FWIW, я никогда не использовал PUT, но использовал DELETE в IE и FF. Не тестировался в Safari или Opera.

8 голосов
/ 01 мая 2009

Вот как это сделать в CURL: Как использовать cURL для тестирования RESTful Rails

Или ... вы определенно можете использовать форму HTML. Если приложение действительно RESTful, оно поймет действия REST и позволит вам выполнять только определенные действия в зависимости от используемого вами метода.

6 голосов
/ 04 мая 2009

Я нашел это действительно классное бесплатное программное обеспечение под названием RESTClient .

Он позволяет вам взаимодействовать с HTTP-ресурсами, используя различные глаголы, вручную настраивая заголовки и текст, настраивая информацию для аутентификации, ssl, запуская тестовые сценарии и т.д.

Это поможет мне понять, как взаимодействовать с нашим программным обеспечением "webservices", которое на самом деле является просто RESTful API для базы данных программного обеспечения.

6 голосов
/ 01 мая 2009

Вы не можете PUT использовать HTML-форму (спецификация определяет только GET / POST для форм).

Однако любой HTTP API должен позволять вам PUT, так же, как он позволяет вам получать или POST. Например, вот документация Java HTTPClient , которая детализирует PUT вместе со всеми другими HTTP-глаголами.

Я не знаю, какой язык вы используете, но я думаю, что написать приложение для выполнения HTTP PUT будет довольно тривиально.

2 голосов
/ 17 сентября 2012
1 голос
/ 10 февраля 2010

Как насчет того, чтобы попробовать libcurl.NET: http://sourceforge.net/projects/libcurl-net/

1 голос
/ 01 мая 2009

"Теперь ко мне пришел администратор этой системы, желая импортировать данные в систему с помощью компонента веб-сервисов."

Веб-службы имеют мало общего с формами HTML.

Запросы веб-сервисов либо делаются из Javascript (например, как Ajax), либо из ваших прикладных программ.

Вы бы написали программу на C # или VB, которая использовала бы HTTP для установки Put на указанный URL-адрес веб-служб с заданным набором данных.

Вот, например, пример кода VB: http://developer.yahoo.com/dotnet/howto-rest_vb.html#post

Заменить строку метода "POST" на "PUT".

1 голос
/ 01 мая 2009

Здесь - это инструмент, который позволяет перетаскивать файлы PUT

0 голосов
/ 21 июля 2009

PUT и DELETE не являются частью HTML4, но включены в спецификации HTML5. По этой причине большинство популярных браузеров не имеют хорошей поддержки для них, так как они ориентированы на HTML4. Тем не менее, они определенно являются частью HTTP и всегда были. Вы делаете PUT, используя не-браузерный клиент или форму в браузере, готовом к HTML5.

Обновление: PUT и DELETE больше не являются частью HTML5 для форм. Смотри: http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fs-method

...