exponenta event banner

послать

Класс: 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 является ContentProviderзатем MATLAB вызывает провайдера, чтобы получить данные для отправки.

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

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

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

  • Чтобы переопределить значение, 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 объект должен иметь имя Host. Если это строка и она не включает схему, то 'http' предполагается. Например, 'www.somewebsite.com' и '//www.somewebsite.com' оба рассматриваются как 'http://www.somewebsite.com'.

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

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

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

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

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

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

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 объект. send способ увеличивает completedrequest аргумент с информацией о проверке подлинности или перенаправлении.

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

После отправки HTTP-запроса проверьте completedrequest аргумент для просмотра событий. Сервер может отправлять несколько сообщений, например, при наличии перенаправлений или при обмене аутентификацией. Если есть несколько сообщений, то 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 и отображения кода состояния сообщения.

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