Как вы делаете HTTP-постинг?

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

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

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

Нажмите здесь, чтобы посмотреть, о чем я говорю (это выглядит лучше всего в firefox, chrome и safari) <ч/" > удаp >

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

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

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

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

ИЗМЕНИТЬ

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

Ответ 1

Здесь пример С# с использованием 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);
        }
}

Обновить: теперь есть класс HttpClient в System.Net.Http(доступный как пакет 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);
    }
}

Ответ 2

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, но использовал DELETE в IE и FF. Не тестировались в Safari или Opera.

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 7

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

Ответ 8

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

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

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

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

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

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

Ответ 10

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

Ответ 11

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