отправка

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

Отправьте запрос HTTP передают и получают ответ

Синтаксис

[response,completedrequest,history] = send(request,uri)
[response,completedrequest,history] = send(request,uri,options,consumer)

Описание

пример

[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. Обычно, запрос '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 автоматически добавляет поле заголовка Агента пользователя. Если вы не хотите это поведение, то добавьте 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) предоставляет дополнительные возможности для обработки сообщения response и request.

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

развернуть все

Запросите сообщение, заданное как объект 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.

Вызовы метода 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 используется, только если он принимает сообщение, на основе различных факторов, таких как заголовок Типа контента в response и является ли response.StatusCode OK. Каждый consumer имеет свои собственные критерии принятия сообщения.

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

Во всех случаях, где потребитель не используется, полезная нагрузка обработана и преобразована, как будто никакой 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 верен, то completedrequest.Body является MessageBody, Payload которого отправили данные от провайдера как вектор uint8. В некоторых случаях, когда Тип контента запроса указывает, что это символьно-ориентировано, свойство MessageBody.Data содержит полезную нагрузку, представленную как строка.

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

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

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

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

resp = send(completedrequest,target)

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

Используйте историю, чтобы получить все заголовки 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 на ошибку, возвращенную в сервер.

Введенный в R2017b