Как вы делаете HTTP Put?
-
03-07-2019 - |
Вопрос
У нас есть это программное обеспечение с компонентом веб-сервисов.
Теперь ко мне пришел администратор этой системы, желая импортировать данные в систему с помощью компонента веб-сервисов.
Итак, я пошел читать документацию, чтобы попытаться понять это, и я вижу такие вещи:
В этой документации приведены примеры взаимодействия с системой с использованием HTTP-глаголов, таких как GET, POST, PUT, DELETE. Но из-за моего ограниченного опыта мне никогда не приходилось отправлять ни HTTP PUT, ни DELETE.
Как ты это делаешь? Я создал HTML-формы, которые имеют метод = " post " или метод = " получить " и запрос отправляется тому, что указано в атрибуте действия (action = " someResource "). Но я действительно не знаю, что делать с этим PUT.
Если бы мне пришлось угадывать, мне нужно было бы создать приложение, которое создает своего рода объект HTTP-запроса и устанавливает все его свойства и каким-то образом включает данные, которые я хочу передать в RESOURCE (
Я думал, что являюсь веб-разработчиком, поскольку знаю такие вещи, как XHTML, CSS, JavaScript и т. д., но, похоже, я совсем ничего не знаю об основах Интернета (HTTP). р>
ИЗМЕНИТЬ
PS: я программирую в основном на .net. Таким образом, любые примеры в .net были бы довольно удивительными.
Решение
Вот пример 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);
}
}
Другие советы
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.
Вот как это сделать в CURL: Как использовать cURL для тестирования RESTful Rails
Или ... вы определенно можете использовать форму HTML. Если приложение действительно RESTful, оно поймет действия REST и позволит вам выполнять только определенные действия в зависимости от используемого вами метода.
Вы не можете PUT использовать форму HTML (спецификация определяет только GET / POST для форм).
Однако любой HTTP API должен позволять вам PUT, так же, как он позволяет вам получать или POST. Например, вот документация по Java HTTPClient , в которой подробно описывается PUT вместе со всеми другие глаголы HTTP.
Я не знаю, какой язык вы используете, но я думаю, что написать приложение для выполнения HTTP PUT будет довольно тривиально.
Я нашел это действительно классное бесплатное программное обеспечение под названием RESTClient .
Он позволяет вам взаимодействовать с HTTP-ресурсами, используя различные глаголы, вручную настраивая заголовки и текст, настраивая информацию для аутентификации, ssl, запуска тестовых сценариев и т. д.
Это поможет мне понять, как взаимодействовать с нашими " веб-сервисами " программное обеспечение, которое действительно просто RESTful API для базы данных программного обеспечения.
Проверьте API как расширение Chrome https://chrome.google.com/webstore/detail/fdmmgilgnpjigdojojpjoooidkmcomcm
Здесь - инструмент, который позволяет перетаскивать файлы PUT
" Теперь ко мне пришел администратор этой системы, желая импортировать данные в систему с помощью компонента веб-сервисов. "
Веб-сервисы имеют мало общего с формами HTML.
Запросы веб-служб выполняются либо из Javascript (например, как Ajax), либо из ваших прикладных программ.
Вы бы написали программу на C # или VB, которая использовала бы HTTP для установки Put на указанный URL-адрес веб-служб с заданным набором данных.
Вот, например, пример кода VB: http: // developer.yahoo.com/dotnet/howto-rest_vb.html#post р>
Замените строку метода " POST " с "PUT".
Как насчет того, чтобы попробовать libcurl.NET: http://sourceforge.net/projects/libcurl -net /
Просто поразмыслите, что некоторые сетевые администраторы блокируют выходы по разным причинам. Поэтому вам, возможно, придется использовать POST вместо PUT. Проверьте с вашими операциями.
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 р>