curl❓
curl 명령어는 다양한 네트워크 프로토콜을 사용하여 데이터를 전송하고 받는 목적으로 사용되는 커맨드 라인 도구이며
URL을 사용하여 웹 서버와 통신하고, 데이터를 다운로드하거나 업로드하며, 여러 프로토콜을 지원한다.
예를들어 자바스크립트 환경에서 REST API(http)를 테스트하고싶다면 보통 ajax, fetch 를 이용해 요청을 보내는 것과 같이, SHELL(커맨드라인 환경)에서 REST API(http) 테스트 하고 싶으면 curl 명령어를 이용하면 된다 라고 이해하면 된다.
HTTP / HTTPS / FTP / LDAP / SCP / TELNET / SMTP / POP3 등 다양하고 주요한 프로토콜을 지원하며 Linux/Unix 계열 및 Windows 등 주요한 OS 에서 구동되므로 여러 플랫폼과 OS에서 유용하게 사용할 수 있다. 이렇게 다양하고 강력한 기능을 가진 옵션들을 제공하지만, 보통 특정 서버에서 빠르게 방화벽 예외 상태를 테스트 하거나, REST 서비스 테스트를 위해 사용된다.
curl 사용
Linux나 Mac OS 에는 curl 명령어 패키지가 기본 탑재되어 있고 Window에서도 설치하여 사용할수 있지만 일반적으로 윈도우에는 편히라게 사용 가능한 tool이나 Postman과 같은 프로그램들이 많기 때문에 잘 사용하지 않는 편이다.
curl 명령어 사용되는 옵션
short 형식 | long 형식 | 설명 |
-k | --insecure | https 프로토콜에서 SSL 인증서에 대한 검증없이 연결 |
-i | --head | HTTP 헤더만 보여주고 컨텐츠는 표시하지 않음 |
-D | --dump-header <file> | HTTP 헤더를 file에 기록 (덤프) |
-L | --location | HTTP 301, 302 응답을 받은 경우 리디렉션 URL로 따라간다. --max-redirs 옵션 뒤에 숫자로 몇 번의 리디렉션까지 따라갈 것인지를 적을 수 있다. 기본 값은 50이다. |
-d | --data | HTTP POST 요청 데이터 입력 |
-J | --remote-header-name | 헤더에 있는 파일 이름으로 다운로드 파일을 저장 |
-o | --output FILE | curl로 받아온 내용을 FILE 이라는 이름의 파일로 저장 |
-O | --remote-name | 파일 저장시 리모트에 저장되어 있던 이름을 그대로 가져와서 로컬에 저장 |
-s | --silent | 진행 내용이나 메시지들을 출력하지 않음 HTTP response code 만 가져오거나 할 경우 유리 |
-X | --request | 요청시 사용할 메소드의 종류 (GET, POST, PUT, PATCH, DELETE) |
-i | --include | 응답에 Content 만 출력하지 않고 서버의 Reponse 도 포함해서 출력한다. (디버깅에 유용) |
-A | --user-agent | 서버에 User-Agent <name> 보내기 |
-u | --user | 서버 사용자 및 비밀번호 |
-T | --upload-file | 로컬 FILE 을 대상으로 전송 |
-f | --fail | HTTP 오류 시 자동으로 실패 (출력 없음) |
-G | 전송할 사이트 url 및 ip 주소 | |
-H | 전송할 헤더를 지정 | |
-J | --remote-header-name | 어떤 웹서비스는 파일 다운로드시 Content-Disposition Header 를 파싱해야 정확한 파일이름을 알 수 있을 경우가 있다. -J 옵션을 주면 헤더에 있는 파일 이름으로 저장한다. |
-v | --verbose | 동작하면서 자세한 헤더 통신 옵션을 출력한다. |
-C | --continue-at | 파일 다운로드 재개 |
curl 코드 예시
1. 웹 페이지 다운로드
curl -O https://www.example.com
https://www.example.com에서 웹 페이지를 다운로드하고 현재 디렉토리에 저장
2. HTTP GET 요청 보내기
curl https://api.example.com/data
https://api.example.com/data로 GET 요청을 보내고 해당 데이터를 출력
3. HTTP POST 요청 보내기
curl -X POST -d "name=John&age=30" https://api.example.com/submit
이 명령어는 POST 요청을 보내고 데이터를 서버로 전송한다.
4. 헤더 정보와 함께 GET 요청 보내기
curl -H "Authorization: Bearer token123" https://api.example.com/resource
이 명령어는 Authorization 헤더와 함께 GET 요청을 보낸다.
5. 파일 업로드
curl -F "file=@/path/to/file.txt" https://api.example.com/upload
이 명령어는 파일을 업로드하는 POST 요청을 보낸다.
6. FTP로 파일 다운로드
curl -u username:password -O ftp://ftp.example.com/file.zip
FTP를 사용하여 파일을 다운로드하며, -u 옵션을 사용하여 사용자 이름과 비밀번호를 지정한다.
7. SFTP로 파일 다운로드
curl -u username:sftp://sftp.example.com/path/to/remote/file.txt -o localfile.txt
SFTP를 사용하여 원격 파일을 다운로드하며, -u 옵션으로 사용자 이름을 지정하고 -o 옵션으로 로컬 파일 이름을 지정한다.
8. HTTP 요청 결과 저장
curl -o output.html https://www.example.com
웹 페이지를 다운로드하고 output.html 파일에 저장한다.
9. 쿠키를 서버로 보내기
curl -b "cookie_name=cookie_value" https://www.example.com
cookie_name과 cookie_value를 가진 쿠키를 서버로 보내고 서버는 이 쿠키를 사용하여 세션을 관리하거나 인증을 수행할 수 있다.
10. 서버에서 설정된 쿠키를 저장하기
curl -c cookies.txt https://www.example.com/login
서버에서 설정된 쿠키를 cookies.txt 파일에 저장하며 이 파일은 이후 요청에서 사용될 수 있다.
11. 저장된 쿠키를 사용하여 요청 보내기
curl -b cookies.txt https://www.example.com/dashboard
cookies.txt 파일에 저장된 쿠키를 사용하여 요청을 보내고 서버는 이 쿠키를 사용자로 식별할 수 있다.
12. 세션 유지하기
curl -b cookies.txt -c cookies.txt https://www.example.com/secure-page
이전 요청에서 저장된 쿠키를 사용하여 세션을 유지하고 보안 페이지에 접근한다.

'Web' 카테고리의 다른 글
[웹] 구글 HTTP Temp 메소드? (0) | 2023.09.21 |
---|---|
[웹] URL ? 알아볼게요 (0) | 2023.09.05 |
[웹] Node.js ? 알아볼게요 (0) | 2023.08.24 |
[웹] 바인딩? 알아볼게요 (0) | 2023.08.24 |
[웹] npm ? 알아볼게요 ( with. code ) (0) | 2023.08.24 |