Main Content

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가 아직 Payload 속성이 설정되어 있지 않은 MessageBodysendrequest.Body.DataMessageBody.Data에 대해 설명된 대로 전송할 HTTP 페이로드를 나타내는 바이트로 구성된 벡터로 변환하기에 적절한 변환 함수를 호출합니다. 일반적으로 'GET' 요청은 데이터를 포함하지 않지만, 이 메서드는 RequestMethod에 관계없이 Body를 전송합니다. 서버에서 데이터를 포함하는 응답을 반환했는데 consumer가 지정되어 있지 않으면 send가 이 데이터를 MATLAB® 데이터로 변환하여 response.Body.Data에 저장합니다. 데이터 변환에 대한 자세한 내용은 MessageBody.Data를 참조하십시오.

request.BodyContentProvider이면 MATLAB이 전송할 데이터를 가져오기 위해 제공자를 호출합니다.

헤더에 이미 send 메서드가 일반적으로 추가하는 필드가 포함되어 있는 경우 이 메서드는 필드에 예상 값이 있는지 확인합니다. 다음과 같이 디폴트 동작을 재정의할 수 있습니다.

  • 헤더를 확인하거나 변경하지 않고 메시지를 있는 그대로 전송하려면 전송하기 전에 request.Completed 속성을 true로 설정하십시오. complete 메서드를 사용하여 요청을 완료한 경우, complete에 제공한 urioptions와 동일한 값을 지정하지 않으면 예기치 않은 결과가 발생할 수 있습니다. Completed가 설정되어 있더라도 RequestLine의 지정되지 않은 필드는 디폴트 값으로 채워집니다.

  • send 메서드가 헤더를 확인하고 변경하는 것은 허용하되 sendContentProvider가 특정 헤더 필드를 추가하는 것을 막으려면 해당 필드에 빈 값([])을 지정하여 request.Header에 추가하십시오. 예를 들어, send는 User-Agent 헤더 필드를 자동으로 추가합니다. 이 필드가 자동으로 추가되지 않도록 하려면 헤더에 HeaderField('User-Agent')를 추가합니다. 빈 값이 지정된 헤더 필드는 메시지에 포함되지 않습니다. Host 필드와 Connection 필드가 추가되는 것은 막을 수 없습니다.

  • send 메서드가 특정 헤더 필드에 추가하는 값을 재정의하려면 메시지를 전송하거나 완료하기 전에 해당 필드를 직접 새로 추가하십시오. 단, ContentProvider가 추가하는 헤더 필드는 이렇게 해도 재정의할 수 없습니다. 그러나 일부 헤더 필드 유형의 경우, 값이 유효하지 않으면 send가 여전히 메시지를 거부할 수 있습니다. 특정 필드의 값이 확인되지 않도록 하거나 ContentProvider가 추가하는 필드를 재정의하려면 원하는 이름과 값으로 matlab.http.field.GenericField 유형의 필드를 헤더에 추가하십시오. sendContentProviderGenericField 헤더와 이름이 동일한 헤더 필드를 추가하지 않으며, 이 헤더의 정확성을 확인하지 않습니다.

  • 원시 이진 데이터를 변환하지 않고 전송하려면 Body.Data 또는 Body.Payloaduint8 벡터를 삽입할 수 있습니다. 유일한 차이점은 Body.Data의 데이터는 메시지의 Content-Type 필드에 따라 변환될 수 있는 반면 Body.Payload는 그렇지 않다는 것입니다. sendCompleted가 이미 설정되어 있더라도 Body.Payload가 비어 있으면 비어 있지 않은 Body.Data를 항상 변환하려고 시도합니다. 변환 규칙은 MessageBody.Data를 참조하십시오.

예제

[response,completedrequest,history] = send(request,uri,options,consumer)request 메시지와 response 메시지를 처리하기 위한 추가 옵션을 제공합니다.

입력 인수

모두 확장

요청 메시지로, matlab.net.http.RequestMessage 객체로 지정됩니다.

메시지 대상으로, matlab.net.URI 객체로 지정되거나 생성자에 허용되는 string형이나 문자형 벡터로 지정됩니다. URI 객체로 지정된 경우, Host 이름이 있어야 합니다. string형으로 지정되었으나 Scheme이 없는 경우, '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에 저장하거나 다른 방식으로 처리할 수 있습니다. 예를 들어, 소비자는 데이터를 Figure 창에 표시하거나 파일에 저장할 수 있습니다. 소비자가 지정된 경우, MATLAB은 MessageBody.Data를 자동으로 설정하지 않으나, options.SavePayload가 true이면 MessageBody.Payload를 변환되지 않은 페이로드로 설정합니다. 예를 들어, FileConsumer는 데이터를 MessageBody.Data가 아닌 파일에 저장합니다.

ContentConsumer를 사용하면 디폴트 MATLAB 응답 데이터 변환에 비해 응답 데이터를 더 유연하게 변환하거나 저장할 수 있습니다. 수신된 데이터의 디폴트 변환에 대한 설명은 MessageBody.Data를 참조하십시오. MATLAB에서 제공하는 ContentConsumer 유형 목록을 보려면 다음을 입력하십시오.

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

이외에도 소프트웨어 개발자는 데이터를 수신하는 동시에 처리하는 자체 ContentConsumer 서브클래스를 생성할 수 있습니다.

consumer는 메시지를 수신하는 경우에만 사용됩니다. 메시지 수신 여부는 response의 Content-Type 헤더, response.StatusCodeOK인지 여부와 같은 다양한 요인에 의해 결정됩니다. 각 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.BodyContentProvider이면 ContentProvider 페이로드는 저장되지 않기 때문에 일반적으로 completedrequest.Body가 비어 있습니다. 단, options.SavePayload가 true이면 completedrequest.BodyMessageBody이고 그 Payload에는 제공자가 전송한 데이터가 uint8 벡터로 들어 있습니다. 요청의 Content-Type이 문자 기반의 요청임을 나타내는 경우, MessageBody.Data 속성은 string형으로 표현되는 페이로드를 갖습니다.

HTTP 요청을 전송한 후 completedrequest 인수를 검토하여 전송된 내용을 확인할 수 있습니다. 서버는 예를 들어, 리디렉션이나 인증 교환이 발생한 경우 여러 메시지를 전송할 수 있습니다. 메시지가 여러 개 있는 경우 completedrequest는 마지막 요청을 포함하게 됩니다. 첫 번째 메시지나 중간 메시지를 보려면 history 인수를 확인하십시오.

동일한 요청을 여러 번 전송하려면 다음과 같이 RequestMessage.complete 메서드를 호출하십시오.

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

그런 다음, 다음 출력 인수를 사용하여 send 메서드를 호출하십시오.

resp = send(completedrequest,target)

메시지 로그로, 이 send 요청을 충족하기 위해 교환된 matlab.net.http.LogRecord 객체로 구성된 벡터로 반환됩니다. 단일 요청과 응답이 있는 경우 history 인수에는 하나의 레코드가 포함됩니다. 여러 메시지가 포함된 인증이 수행되는 경우에는 각 리디렉션별 여러 로그 레코드가 내역(history 인수)에 포함될 수 있습니다.

여러 응답 메시지에서 모든 Set-Cookie 헤더를 가져오기 위해 내역을 사용할 수 있습니다. 후속 요청에서 이러한 헤더를 서버로 다시 전송할 수 있습니다.

내역에 있는 마지막 레코드에는 Body 속성을 제외하고 completedrequest 인수 및 response 인수와 동일한 속성이 포함됩니다. 메시지 본문을 기록하려면 options 인수에 SavePayload 속성을 지정하십시오.

이러한 내역은 디버그에도 유용할 수 있습니다.

예제

모두 확장

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

HTTP 옵션 MaxRedirects를 0으로 설정하여 mathworks.com 웹사이트에서의 메시지 리디렉션을 방지합니다. 그런 다음 상태 코드 정보를 표시합니다.

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'

오류 처리

항상 responseStatus 속성을 검사하여 요청이 수락되었는지 확인합니다. 오류 조건은 다음과 같습니다.

  • MException — 메시지가 잘못 구성되어 완료될 수 없습니다.

  • HTTPException — 메시지가 완료되었지만, 웹 서비스에 접근할 수 없거나 웹 서비스가 options에 지정된 제한 시간 내에 응답하지 않습니다.

  • responseStatus 속성 — 웹 서비스가 응답하지만 HTTP 오류 상태를 반환합니다. sendStatus 속성을 서버에서 반환된 오류로 설정하여 정상적으로 반환합니다.

버전 내역

R2016b에 개발됨