요청 보내기

적용 대상: 모든 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>

특성

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

Elements

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

사용

사용법 참고 사항

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

이 시나리오에서 API 요청을 게이트웨이에 연결하려면 localhost 루프백 URL https://127.0.0.1을 사용하도록 set-url을 구성합니다. 또한 이 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>

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