다음을 통해 공유


요청 보내기

적용 대상: 모든 API Management 계층

send-request 정책은 지정된 URL에 대한 제공된 응답을 설정된 시간 초과 값 이상으로 기다리지 않고 요청을 보냅니다.

참고 항목

정책 문에 제공된 순서대로 정책의 요소 및 자식 요소를 설정합니다. API Management 정책을 설정하거나 편집하는 방법에 대해 자세히 알아봅니다.

정책 문

<send-request mode="new | copy" response-variable-name="" timeout="60 sec" ignore-error
="false | true">
  <set-url>request URL</set-url>
  <set-method>...</set-method>
  <set-header>...</set-header>
  <set-body>...</set-body>
  <authentication-certificate thumbprint="thumbprint" />
  <proxy>...</proxy>
</send-request>

특성

특성 설명 필수 항목 기본값
모드 new 요청인지, 아니면 현재 요청에 있는 헤더와 본문의 copy인지 결정합니다. 아웃바운드 정책 섹션에서 mode=copy는 요청 본문을 초기화하지 않습니다. 정책 식이 허용됩니다. 아니요 new
response-variable-name 응답 개체를 받을 컨텍스트 변수의 이름입니다. 변수가 없는 경우 정책 실행이 성공하는 즉시 변수가 생성되며 context.Variable 컬렉션을 통해 액세스할 수 있습니다. 정책 식이 허용됩니다. 해당 없음
시간 제한 URL 호출이 실패하는 시간 초과 간격(초)입니다. 정책 식이 허용됩니다. 아니요 60 (육십)
ignore-error true이고 요청에서 오류가 발생하면 오류가 무시되고 응답 변수에 null 값이 포함됩니다. 정책 식은 허용되지 않습니다. 아니요 false

요소들

요소 설명 필수 항목
URL 설정 요청의 URL입니다. 정책 식이 허용됩니다. mode=copy인 경우 아니요이고, 그렇지 않으면 예입니다.
설정-방법 요청 방법을 설정합니다. 정책 식은 허용되지 않습니다. mode=copy인 경우 아니요이고, 그렇지 않으면 예입니다.
헤더 설정 요청에 헤더를 설정합니다. 여러 요청 헤더에는 여러 set-header 요소를 사용합니다. 아니요
set-body 요청 본문을 설정합니다. 아니요
인증-인증서 클라이언트 인증에 사용할 인증서thumbprint 특성에 지정됩니다. 아니요
프록시 HTTP 프록시를 통해 요청을 라우팅합니다. 아니요

사용

사용법 참고 사항

API Management 인스턴스가 내부 모드로 VNet에 배포(삽입)되고 이 정책을 사용하여 동일한 API Management 인스턴스에 노출된 API에 API 요청을 보내는 경우 HTTP 500 BackendConnectionFailure 오류로 인해 시간 제한이 발생할 수 있습니다. 이는 Azure Load Balancer 제한 사항으로 인한 결과입니다.

이 시나리오에서 API 요청을 게이트웨이에 연결하려면 localhost 루프백 URL set-url을 사용하도록 https://127.0.0.1을 구성합니다. 또한 이 API Management 인스턴스의 게이트웨이 호스트를 지정하려면 HOST 헤더를 설정합니다. 기본 azure-api.net 또는 사용자 지정 도메인 호스트를 사용할 수 있습니다. 예시:

<send-request>
     <set-url>https://127.0.0.1/myapi/myoperation</set-url>
     <set-header name="Host">
         <value>myapim.azure-api.net</value>
     </set-header>
</send-request>

자세한 내용은 이 블로그 게시물을 참조하세요.

예시

이 예에서는 권한 부여 서버에서 참조 토큰을 확인하는 한 가지 방법을 보여 줍니다. 이 샘플에 대한 자세한 내용은 Azure API Management 서비스에서 외부 서비스 사용을 참조하세요.

<inbound>
  <!-- Extract token from Authorization header parameter -->
  <set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization","scheme param").Split(' ').Last())" />

  <!-- Send request to Token Server to validate token (see RFC 7662) -->
  <send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
    <set-url>https://microsoft-apiappec990ad4c76641c6aea22f566efc5a4e.azurewebsites.net/introspection</set-url>
    <set-method>POST</set-method>
    <set-header name="Authorization" exists-action="override">
      <value>basic dXNlcm5hbWU6cGFzc3dvcmQ=</value>
    </set-header>
    <set-header name="Content-Type" exists-action="override">
      <value>application/x-www-form-urlencoded</value>
    </set-header>
    <set-body>@($"token={(string)context.Variables["token"]}")</set-body>
  </send-request>

  <choose>
        <!-- Check active property in response -->
        <when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] == false)">
            <!-- Return 401 Unauthorized with http-problem payload -->
            <return-response>
                <set-status code="401" reason="Unauthorized" />
                <set-header name="WWW-Authenticate" exists-action="override">
                    <value>Bearer error="invalid_token"</value>
                </set-header>
            </return-response>
        </when>
    </choose>
  <base />
</inbound>

정책 작업에 대한 자세한 내용은 다음을 참조하세요.