curl 사용법 대충 정리.
intro
- 종종 까먹는 명령어 정리가 필요해서 작성한다.
- https://curl.se/ 여기서 자세히 볼 수 있다.
- 예전에 windows 에서 빌드하는법 정리를 했었는데, 이제 세상이 바뀌어서 그 자료는 그다지 필요없을듯.
- 언젠가 기회가 되면 C/C++ 에서 curl 사용하는 법 정리를 해야겠다.
대표적인 옵션
- -i : 응답 헤더를 보여준다.
- -I : 사이트의 header 정보만 받는다.
- -H : http header 정보를 전달한다.
- -H “Accept: text/plain”
- -c : 응답 쿠키를 특정 파일에 저장한다.
- curl -c cookie.txt http://example.com
- -b : 저장한 쿠키를 header 에 추가해서 요청한다.
- curl -b cookie.txt http://example.com
- -X : http method 를 지정한다.
- -o : 응답을 file로 출력한다.
- curl http://example.com -o “output.txt”
- -O : 파일 저장시 remote에 저장되어있던 이름을 그대로 가져와서 저장한다.
- -s : 프로그레스나 에러 정보를 보여주지 않는다.
- -S : -s 옵션 사용시 발생하는 에러를 출력해준다.
- -L : 응답헤더가 30X일 경우 옮겨진 redirection 로 다시 요청을 보낸다.
- -D : 응답 헤더를 특정 파일에 저장한다.
- -d : 함께 전달할 파마리터 값을 설정한다.
- -v : 동작하면서 자세한 데이터를 출력한다.
- -k : SSL 인증서를 무시하자.
- -A : user agent 를 보낸다.
- -e : referer 를 지정한다.
예시로 보는 좀더 자세한 샘플
- http 헤더에 content type 을 json으로 지정하고 post 로 json 형태의 데이터를 보낸다.
$ curl -d '{"key1":"value1", "key2":"value2"}' \
-H "Content-Type: application/json" \
-X POST http://example.com
- 레퍼러를 설정해보자.
curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" http://example.com
- http 헤더에 Bearer token 포함해서 보내보자
curl -X POST\
-H Content-Type:application/json\
-H Authorization: Bearer abcdefg\
-d @data.json\
- User Agent 를 확인해 보자.
// httpbin.org/headers 로 요청을 날리면 전달된 user agent 를 그대로 출력한다.
curl httpbin.org/headers
libcurl에서 30X 를 처리하자.
- 아래처럼 옵션을 켜주어야 한다.
- redirection이 여러번 일어날 경우 max 값을 지정할 수 있다.
- 기본적으로 301~303 로 redirection 이 일어나면 기본적으로 GET 으로 전환되지만, redirectino 에서도 POST 를 유지하려면 CURL_REDIR_POST_ALL 옵션을 주자.
- 3XX 는 redirection 이 일어나도 처음 요청할때의 요청 method 가 그대로 유지된다.
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 5L); // redirection 을 5번 허용한다.
curl_easy_setopt(curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL); // redirection 시 POST 를 유지한다.