반응형
사후 대응적인 Web Client가 3XX 리다이렉트를 따르도록 하려면 어떻게 해야 합니까?
spring-boot 2에서 netty를 사용하여 reactive Webclient를 사용하여 요청을 하는 기본 REST 컨트롤러를 만들었습니다.
@RestController
@RequestMapping("/test")
@Log4j2
public class TestController {
private WebClient client;
@PostConstruct
public void setup() {
client = WebClient.builder()
.baseUrl("http://www.google.com/")
.exchangeStrategies(ExchangeStrategies.withDefaults())
.build();
}
@GetMapping
public Mono<String> hello() throws URISyntaxException {
return client.get().retrieve().bodyToMono(String.class);
}
}
3XX 응답 코드가 반환되면 웹 클라이언트가 응답 내의 Location을 사용하여 리다이렉트를 추적하고 3XX 이외의 응답을 얻을 때까지 해당 URI를 재귀적으로 호출합니다.
실제 결과는 3XX 응답입니다.
문서별로 클라이언트를 설정해야 합니다.
WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(
HttpClient.create().followRedirect(true)
))
함수의 URL 파라미터를 작성하여 3XX 응답을 받을 때 반복 호출할 수 있습니다.다음과 같습니다(실제 실장에서는 리다이렉트 수를 제한할 수 있습니다).
public Mono<String> hello(String uri) throws URISyntaxException {
return client.get()
.uri(uri)
.exchange()
.flatMap(response -> {
if (response.statusCode().is3xxRedirection()) {
String redirectUrl = response.headers().header("Location").get(0);
return response.bodyToMono(Void.class).then(hello(redirectUrl));
}
return response.bodyToMono(String.class);
}
언급URL : https://stackoverflow.com/questions/47655789/how-to-make-reactive-webclient-follow-3xx-redirects
반응형
'programing' 카테고리의 다른 글
React.js - 기본 프로펠이 null과 함께 사용되지 않습니다. (0) | 2023.03.22 |
---|---|
swing 어플리케이션을 사용한 스프링부트 설정 방법 (0) | 2023.03.22 |
워드프레스 모든 투고 표시 (0) | 2023.03.22 |
React 상태 비저장 구성 요소의 TypeScript 반환 유형은 무엇입니까? (0) | 2023.03.22 |
PHP 경고: require_once(/var/www/html/wp-config.php): 스트림을 열지 못했습니다./var/www/html/wp-load에서 권한이 거부되었습니다.37행의 php (0) | 2023.03.22 |