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. Обычно, '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) предоставляет дополнительные возможности для обработки 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.

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