요청 보내기
적용 대상: 모든 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 프록시를 통해 요청을 라우팅합니다. | 아니요 |
사용
- 정책 섹션: inbound, outbound, backend, on-error
- 정책 범위: 전역, 작업 영역, 제품, API, 작업
- 게이트웨이: 전용, 사용량, 자체 호스팅, 작업 영역
사용법 참고 사항
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>
관련 정책
관련 콘텐츠
정책 작업에 대한 자세한 내용은 다음을 참조하세요.
- 자습서: API 변환 및 보호
- 정책 문 및 해당 설정에 대한 전체 목록에 대한 정책 참조
- 정책 식
- 정책 설정 또는 편집
- 정책 구성 재사용
- 정책 코드 조각 리포지토리
- Azure API Management 정책 도구 키트
- Azure의 Microsoft Copilot을 사용하는 작성자 정책