행위

Curl multi request

DB CAFE

thumb_up 추천메뉴 바로가기


curl은 커맨드라인에서 HTTP 요청을 보내는데 사용되는 유용한 도구 중 하나입니다. curl을 사용하여 여러 개의 HTTP 요청을 병렬로 보내고 처리하는 방법은 curl의 multi 인터페이스를 사용하는 것입니다. multi 인터페이스는 비동기적으로 여러 개의 curl 핸들을 처리하므로 여러 개의 요청을 동시에 처리할 수 있습니다.

다음은 curl multi request를 보내고 처리하는 방법의 예시입니다. 이 예제에서는 Google과 Github에서 각각 한 개씩의 웹 페이지를 다운로드합니다.

bash Copy code

  1. !/bin/bash
  1. curl multi request 보내기

curl --silent --output /dev/null --fail http://www.google.com & curl --silent --output /dev/null --fail http://www.github.com &

  1. 모든 curl 핸들을 처리하고 결과 출력

wait echo "All requests completed" 위 예제에서는 --silent 옵션을 사용하여 curl의 출력을 숨깁니다. --output /dev/null 옵션은 curl의 출력을 /dev/null로 리다이렉트합니다. --fail 옵션은 curl이 서버에서 HTTP 오류 코드를 반환할 때 실패를 반환하도록 지시합니다.

또한, &를 사용하여 각각의 curl 명령어를 백그라운드에서 실행시키고, wait 명령어로 모든 백그라운드 프로세스가 완료될 때까지 대기합니다. 그리고 마지막으로 "All requests completed" 메시지를 출력합니다.

이와 같이 multi 인터페이스를 사용하여 curl 명령어를 병렬로 실행할 수 있습니다. 또한, curl_multi_add_handle() 함수를 사용하여 다른 curl 핸들을 추가하고, curl_multi_perform() 함수를 사용하여 모든 핸들을 실행할 수 있습니다. 자세한 내용은 curl 공식 문서를 참조하시기 바랍니다.


chiyoung kim curl_multi_add_handle() 사용법

curl_multi_add_handle() 함수는 multi 인터페이스를 사용하여 병렬로 실행할 curl 핸들을 추가하는 데 사용됩니다. 이 함수는 CURLMcode 타입의 반환값을 가지며, 핸들 추가가 성공하면 CURLM_OK가 반환됩니다.

다음은 curl_multi_add_handle() 함수를 사용하여 curl 핸들을 추가하는 예시입니다.

C Copy code CURL *easy_handle1, *easy_handle2; CURLM *multi_handle; CURLMcode res;

easy_handle1 = curl_easy_init(); curl_easy_setopt(easy_handle1, CURLOPT_URL, "http://example.com");

easy_handle2 = curl_easy_init(); curl_easy_setopt(easy_handle2, CURLOPT_URL, "http://example.net");

multi_handle = curl_multi_init(); curl_multi_add_handle(multi_handle, easy_handle1); curl_multi_add_handle(multi_handle, easy_handle2);

// multi handle 실행

curl_multi_cleanup(multi_handle); curl_easy_cleanup(easy_handle1); curl_easy_cleanup(easy_handle2); 위 예제에서는 curl_easy_init() 함수를 사용하여 두 개의 curl 핸들을 생성하고, curl_easy_setopt() 함수를 사용하여 각 핸들에 대한 옵션을 설정합니다. 이후 curl_multi_init() 함수를 사용하여 multi 핸들을 초기화하고, curl_multi_add_handle() 함수를 사용하여 두 개의 curl 핸들을 추가합니다.

그리고 curl_multi_perform() 함수를 사용하여 추가된 모든 핸들을 실행하고, curl_multi_cleanup() 함수로 multi 핸들을 정리합니다. 마지막으로, 각각의 curl 핸들을 정리하기 위해 curl_easy_cleanup() 함수를 사용합니다.

주의할 점은, multi 핸들을 실행하는 동안 추가된 curl 핸들을 제거하면 안 됩니다. 제거하려면 curl_multi_remove_handle() 함수를 사용해야 합니다. 또한, multi 핸들 실행 후 curl_multi_info_read() 함수를 사용하여 각 핸들의 성공 여부 및 결과를 확인할 수 있습니다.