send

Класс: matlab.net.http.RequestMessage
Пакет: matlab.net.http

Отправка HTTP- запроса сообщения и получение ответа

Описание

пример

[response,completedrequest,history] = send(request,uri) отправляет request сообщение веб-сервису, заданное uri и возвращает response, если таковые имеются. Если нет request.Method задается свойство, затем send метод устанавливает свойство на 'GET'.

По умолчанию send проверяет семантическую правильность заголовков и других частей сообщения и завершает uri. Метод также заполняет все необходимые поля заголовка для правильно сформированного запроса. Если request.Body является MessageBody чьи Payload свойство еще не задано, тогда send вызывает соответствующие функции преобразования для преобразования любых request.Body.Data в вектор байтов, представляющий полезную нагрузку HTTP, которая будет отправлена, как описано для MessageBody.Data. Как правило, a 'GET' запрос не содержит данных, но метод отправляет Body независимо от RequestMethod. Если сервер возвращает данные в своем ответе и нет consumer задается, затем send преобразует эти данные в MATLAB® данные и сохраняет их в response.Body.Data. См. MessageBody.Data для получения дополнительной информации о преобразовании данных.

Если request.Body является ContentProviderMATLAB вызывает провайдера, чтобы получить данные, которые будут отправлены.

Если заголовок уже содержит поле, которое обычно добавляет метод, то send проверяет, имеет ли поле ожидаемое значение. Переопределить поведение по умолчанию можно следующим образом.

  • Чтобы отправить сообщение как есть без какой-либо проверки или изменения заголовка, установите request.Completed свойство к true перед отправкой. Если вы использовали complete метод для выполнения запроса, затем вы должны задать то же значение uri и options который вы предоставили completeили могут быть непредсказуемые результаты. Даже если Completed установлено, не заданные поля в RequestLine будет заполнено значениями по умолчанию.

  • Чтобы разрешить send метод проверки и изменения заголовка, но подавления добавления определенного поля заголовка, которое send или ContentProvider может добавить, добавить это поле в request.Header с пустым значением ([]). Для примера, send автоматически добавляет поле заголовка User-Agent. Если вы не хотите этого поведения, добавьте HeaderField('User-Agent') в заголовок. Поля заголовка с пустыми значениями в сообщение не включаются. Невозможно подавить поля Хост и Подключение.

  • Чтобы переопределить значение, которое send метод добавляет для данного поля заголовка, добавьте свой собственный образец этого поля перед отправкой или заполнением сообщения. Однако это не переопределит поле заголовка, которое ContentProvider Однако для некоторых типов полей заголовка send может все еще отклонить сообщение, если значение недопустимо. Чтобы предотвратить любую проверку значения заданного поля или переопределить поле, которое ContentProvider добавляет, добавляет поле типа matlab.http.field.GenericField в заголовок с желаемым именем и значением. Ни один из send ни ContentProvider добавит любые поля заголовка с именами, равными любым GenericField заголовки и не будут проверять их правильность.

  • Чтобы отправить необработанные двоичные данные без преобразования, можно вставить uint8 вектор в любой из Body.Data или Body.Payload. Единственное различие заключается в том, что данные в Body.Data подлежит преобразованию на основе поля Content-Type в сообщении, в то время как Body.Payload не является. send всегда пытается преобразовать непустые Body.Data если Body.Payload пуст, даже если Completed уже задан. См. MessageBody.Data для правил преобразования.

пример

[response,completedrequest,history] = send(request,uri,options,consumer) предоставляет дополнительные опции для обработки request и response сообщений.

Входные параметры

расширить все

Запрос сообщения, заданный как matlab.net.http.RequestMessage объект.

Адрес назначения сообщения, заданный как matlab.net.URI объект или строка или вектор символов, приемлемый для конструктора. Если значение является URI объект, тогда он должен назвать Хост. Если это строка и она не включает Схему, то 'http' принято. Для примера, 'www.somewebsite.com' и '//www.somewebsite.com' оба рассматриваются как 'http://www.somewebsite.com'.

Дополнительные опции, заданные как matlab.net.http.HTTPOptions объект, для обработки сообщений запроса и ответа. Если не указано, или если значение пустое, то send использует опции по умолчанию.

Потребитель содержимого для обработки возвращенной полезной нагрузки, заданной как matlab.net.http.io.ContentConsumer объект или указатель на функцию, которая возвращает ContentConsumer.

The send метод вызывает ContentConsumer обработку или хранение буферов данных в режиме реального времени при получении данных. The consumer может хранить данные в response.Body.Data или обработайте его каким-то другим способом. Например, потребитель может отобразить данные в окне рисунка или сохранить их в файле. Когда потребитель задан, MATLAB не устанавливает автоматически MessageBody.Data, но он установит MessageBody.Payload к невертированной полезной нагрузке, если options.SavePayload является true. Для примера, a FileConsumer сохраняет данные в файл, а не в MessageBody.Data.

Использование ContentConsumer обеспечивает большую гибкость в преобразовании или хранении данных отклика, чем преобразование данных отклика по умолчанию MATLAB. Описание преобразования полученных данных по умолчанию смотрите в MessageBody.Data. Список ContentConsumer типы, предоставляемые MATLAB, тип:

mp = ?matlab.net.http.io.ContentConsumer;
{mp.ContainingPackage.ClassList.Name}'

В сложение разработчиков программного обеспечения можете создать свои собственные ContentConsumer подклассы для обработки данных по мере их получения.

The consumer используется только, если оно принимает сообщение, на основе различных факторов, таких как заголовок Content-Type в response и является ли response.StatusCode является OK. Каждый consumer имеет свои критерии для принятия сообщения.

Если полезная нагрузка сжата поддерживаемой кодировкой, и options не задан или options.DecodePayload true, тогда потребитель получает декомпрессированные данные. Если полезная нагрузка сжата и options.DecodePayload false, или полезная нагрузка сжата неподдерживаемой кодировкой, тогда потребитель не используется, и обработка данных по умолчанию отсутствует.

Во всех случаях, когда потребитель не используется, полезная нагрузка обрабатывается и преобразуется так, как будто нет consumer был задан.

Если consumer является указателем на функцию, функция вызывается для создания экземпляров потребителя только после того, как MATLAB определяет, что ответ имеет полезную нагрузку.

При указании consumer но нет options, добавить заполнитель [] аргумент для options использовать опции по умолчанию.

Выходные аргументы

расширить все

Сообщение, полученное от сервера, возвращается как matlab.net.http.ResponseMessage объект. Возможен промежуточный обмен запросами и ответами между MATLAB и прокси или сервером при наличии перенаправлений и/или аутентификации.

Запрос, отправленный до получения response аргумент, возвращенный как matlab.net.http.RequestMessage объект. The send метод увеличивает completedrequest аргумент с информацией о проверке подлинности или перенаправлении.

Если request.Body является ContentProvider, затем completedrequest.Body обычно пуст, потому что ContentProvider полезные нагрузки не сохраняются. Однако, если options.SavePayload верно, тогда completedrequest.Body является MessageBody чьи Payload имеет данные, отправленные от провайдера как uint8 вектор. В некоторых случаях, когда Content-Type запроса указывает, что он основан на символах, MessageBody.Data свойство содержит полезную нагрузку, представленную в виде строки.

Отправив HTTP- запроса, исследуйте completedrequest Аргумент, чтобы увидеть, что такое sent.Сервер может отправлять несколько сообщений, например, если были перенаправления или произошел обмен аутентификацией. Если сообщений несколько, то completedrequest содержит последний запрос. Чтобы увидеть первые, или промежуточные сообщения, посмотрите на history аргумент.

Чтобы отправить один и тот же запрос несколько раз, вызовите RequestMessage.complete метод:

[completedrequest,target] = complete(request,uri)

Затем вызовите send метод с этими выходными аргументами:

resp = send(completedrequest,target)

Журнал сообщений, возвращенный как вектор matlab.net.http.LogRecord объекты, которые были обменены, чтобы удовлетворить эту send запрос. Если у вас есть один запрос и ответ, то history аргумент содержит одну запись. В случае проверки подлинности, содержащей несколько сообщений, история может содержать несколько записей журнала для каждого перенаправления.

Используйте историю для получения всех заголовков Set-Cookie из ответных сообщений. Эти заголовки можно отправить обратно на сервер в последующих запросах.

Последняя запись в истории содержит те же свойства, что и completedrequest и response аргументы, кроме Body свойство. Чтобы войти в журнал тел сообщений, задайте SavePayload свойство в options аргумент.

История также может быть полезной для отладки.

Примеры

расширить все

Отправьте HTTP-сообщение, чтобы прочитать веб-страницу MathWorks Contact Support и отобразить код состояния сообщения.

import matlab.net.*
import matlab.net.http.*
r = RequestMessage;
uri = URI('https://www.mathworks.com/support/contact_us');
resp = send(r,uri);
status = resp.StatusCode
status = 

    OK

Запретить перенаправление сообщений из mathworks.com веб-сайт путем установки опции HTTP MaxRedirects в нуль. Затем отобразите информацию о коде состояния.

import matlab.net.*
import matlab.net.http.*
r = RequestMessage;
uri = URI('https://www.mathworks.com/support/contact_us');
options = HTTPOptions('MaxRedirects',0);
[resp,~,hist] = send(r,uri,options);
status = getReasonPhrase(resp.StatusCode)
status =

    'Moved Permanently'

Обработка ошибок

Всегда проверяйте response Status свойство для определения, был ли запрос принят. Условия ошибки:

  • MException - Сообщение не сформировано и не может быть завершено.

  • HTTPException - Сообщение завершено, но веб-служба недоступна или не отвечает в течение периода ожидания, указанного в options.

  • Status свойство response - Веб-служба отвечает и возвращает состояние HTTP-ошибки. send возвращается нормально, устанавливая Status свойство ошибки, возвращенной с сервера.

Введенный в R2016b