DrawingProcess
드프 DrawingProcess
DrawingProcess
전체 방문자
오늘
어제
«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
  • 분류 전체보기 (964)
    • Profile & Branding (22)
      • Career (15)
    • IT Trends (254)
      • Conference, Faire (Experien.. (31)
      • News (187)
      • Youtube (19)
      • TED (8)
      • Web Page (2)
      • IT: Etc... (6)
    • Contents (97)
      • Book (66)
      • Lecture (31)
    • Project Process (94)
      • Ideation (0)
      • Study Report (34)
      • Challenge & Award (22)
      • 1Day1Process (5)
      • Making (5)
      • KRC-FTC (Team TC(5031, 5048.. (10)
      • GCP (GlobalCitizenProject) (15)
    • Study: ComputerScience(CS) (72)
      • CS: Basic (9)
      • CS: Database(SQL) (5)
      • CS: Network (14)
      • CS: OperatingSystem (3)
      • CS: Linux (39)
      • CS: Etc... (2)
    • Study: Software(SW) (95)
      • SW: Language (29)
      • SW: Algorithms (1)
      • SW: DataStructure & DesignP.. (1)
      • SW: Opensource (15)
      • SW: Error Bug Fix (43)
      • SW: Etc... (6)
    • Study: Artificial Intellige.. (149)
      • AI: Research (1)
      • AI: 2D Vision(Det, Seg, Tra.. (35)
      • AI: 3D Vision (70)
      • AI: MultiModal (3)
      • AI: SLAM (0)
      • AI: Light Weight(LW) (3)
      • AI: Data Pipeline (7)
      • AI: Machine Learning(ML) (1)
    • Study: Robotics(Robot) (33)
      • Robot: ROS(Robot Operating .. (9)
      • Robot: Positioning (8)
      • Robot: Planning & Control (7)
    • Study: DeveloperTools(DevTo.. (83)
      • DevTool: Git (12)
      • DevTool: CMake (13)
      • DevTool: NoSQL(Elastic, Mon.. (25)
      • DevTool: Container (17)
      • DevTool: IDE (11)
      • DevTool: CloudComputing (4)
    • 인생을 살면서 (64)
      • 나의 취미들 (7)
      • 나의 생각들 (42)
      • 여행을 떠나자~ (10)
      • 분기별 회고 (5)

개발자 명언

“ 매주 목요일마다 당신이 항상 하던대로 신발끈을 묶으면 신발이 폭발한다고 생각해보라.
컴퓨터를 사용할 때는 이런 일이 항상 일어나는데도 아무도 불평할 생각을 안 한다. ”

- Jef Raskin

맥의 아버지 - 애플컴퓨터의 매킨토시 프로젝트를 주도

인기 글

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
DrawingProcess

드프 DrawingProcess

Study: ComputerScience(CS)/CS: Linux

[Linux] 리눅스 cURL 명령어: 다양한 프로토콜로 웹 요청 / 원하는 파일을 내려받자.

2022. 7. 20. 05:57
반응형
cURL을 이용하여 다양한 통신 프로토콜에 데이터를 전송할 수 있습니다.
일반적으로 웹 서비스 개발 시 테스트 및 디버깅 용도로 많이 사용되고 cmd에서 실행 가능하므로 웹 요청에 필요한 배치 작업을 자동화할 수 있습니다.

옵션

short long Discription etc
-k --insecure https 사이트를 SSL certificate 검증없이 연결한다. wget 의 --no-check-certificate 과 비슷한 역할 수행
-l --head HTTP header 만 보여주고 content 는 표시하지 않는다  
-D --dump-header <file> <file> 에 HTTP header 를 기록한다.  
-L --location 서버에서 HTTP 301 이나 HTTP 302 응답이 왔을 경우 redirection URL 로 따라간다.
--max-redirs 뒤에 숫자로 redirection 을 몇 번 따라갈지 지정할 수 있다. 기본 값은 50이다
curl -v daum.net 을 실행하면 결과값으로 다음과 같이 HTTP 302 가 리턴된다.
< HTTP/1.1 302 Object Moved
< Location: http://www.daum.net/
-L 옵션을 추가하면 www.daum.net 으로 재접속하여 결과를 받아오게 된다.
-d --data HTTP Post data를 전송한다 FORM 을 POST 하는 HTTP나 JSON 으로 데이타를 주고받는 REST 기반의 웹서비스 디버깅시 유용한 옵션이다
-G --get HTTP GET data를 전송한다.  
-X --request Request method를 지정한다. 기본 값 = POST
-v --verbose  동작하면서 자세한 옵션을 출력한다.  
-J --remote-header-name 어떤 웹서비스는 파일 다운로드시 Content-Disposition Header 를 파싱해야 정확한 파일이름을 알 수 있을 경우가 있다. -J 옵션을 주면 헤더에 있는 파일 이름으로 저장한다. curl 7.20 이상부터 추가된 옵션
-o --output FILE curl 은 remote 에서 받아온 데이타를 기본적으로는 콘솔에 출력한다. -o 옵션 뒤에 FILE 을 적어주면 해당 FILE 로 저장한다. (download 시 유용)  
-O --remote-name file 저장시 remote 의 file 이름으로 저장한다. -o 옵션보다 편리하다.  
-s --silent 정숙 모드. 진행 내역이나 메시지등을 출력하지 않는다. -o 옵션으로 remote data 도 /dev/null 로 보내면 결과물도 출력되지 않는다 HTTP response code 만 가져오거나 할 경우 유리
-b --cookie 쿠키 값을 전송한다.  
-H --header Content-Type을 지정한다.  
  --trace-ascii HTTP 데이터 통신 과정의 상세 정보를 출력한다.  

 

사용 예제 (데이터 요청)


GET 요청

 curl -G http://webisfree.com/action/?param1=value1&m2=value2

POST 요청

예제 ① 
 curl http://test.com/post -d param1=value1 -d param2=value2
예제 ② 
 curl http://test.com/post -d "param1=value1&m2=value2"

SSL 인증서 검증

curl은 https 사이트의 SSL 인증서를 검증한다.
인증서 목록이 없거나 알 수 없는 기관에서 발급한 인증서는 다음과 같은 인증서 검증 에러를 발생시킨다.
curl: (77) schannel: next InitializeSecurityContext failed:
SEC_E_UNTRUSTED_ROOT (0x80090325) - 신뢰되지 않은 기관에서 인증서 체인을 발급했습니다.
아래처럼 HTTPS 검증을 하지 않는 옵션을 사용하거나 인증기관 목록을 추가하여 해결한다.
 curl -k https://test.com/

프로토콜 디버깅 (통신과정 확인)

curl --trace-ascii test.dump http://www.test.com/test

Content-Type 지정

① 폼 데이터 전송 
 curl http://test.com/post -d "param1=value1&m2=value2" -H "Content-Type: application/x-www-form-urlencoded"

① JSON 데이터 전송 

 curl http://test.com/post -H "Content-Type: application/json" -d '{"key1":"value1", "key2":"value2"}'

쿠키 값 지정

 curl http://test.com/home -b "JSESSIONID=7A22ABF5FBA40538BD06A97FFA815F7E"

 

사용 예제 (데이터 받기)


응답을 파일에 쓰기

$ curl http://jeonkkochbi.tistory.com/resource > foo.txt

 

그냥 옵션 없이 curl를 사용하면 표준출력으로 request 출력,
그러므로 예제처럼 리다이렉트해서 바로 파일에 쓸 수 있다.

// -o : 파일이름 변경하여 저장
$ curl -o foo.txt http://jeonkkochbi.tistory.com/foo.txt

// -O : 파일이름 그대로 저장
$ curl -O foo.txt http://jeonkkochbi.tistory.com/foo.txt

여러 파일을 다운로드

$ curl -O http://jeonkkochbi.tistory.com/foo[0-9].txt
$ curl -O http://jeonkkochbi.tistory.com/foo-[a-z][0-9].txt
  • foo0.txt 부터 foo9.txt 파일을 다운로드 받는 것도 가능하며,
  • []는 여러 번 조합할 수 있고, foo-a0.txt 부터 foo-z9.txt 까지 파일을 내려받습니다.
$ curl -O http://jeonkkochbi.tistory.com/{foo,bar,baz}.txt
  • 중괄호를 써서 리스트(list)자료형을 호출할 수도 있다. foo.txt, bar.txt, baz.txt 를 다운로드 받는다.

shell 의 for문 활용 (고급)

$ files="foo bar baz"
$ for name in files; do
    curl -O "http://jeonkkochbi.tistory.com/${name}.txt"
  done

참고


  • curl , wget 으로 다이렉트 다운로드 해보자!: https://jeonkkochbi.tistory.com/43
  • curl 설치 및 사용법 - HTTP GET/POST, REST API 연계등: https://www.lesstif.com/software-architect/curl-http-get-post-rest-api-14745703.html
  • [Tistory] cURL을 이용한 데이터 전송: https://jdh5202.tistory.com/789
  • 리눅스 curl : command line 웹 요청 명령어: https://www.leafcats.com/188
  • [전꽃비블로그:티스토리]:  https://jeonkkochbi.tistory.com/43

반응형
저작자표시 비영리 변경금지 (새창열림)

'Study: ComputerScience(CS) > CS: Linux' 카테고리의 다른 글

[Linux] 리눅스 디렉토리(폴더) 구조: /home, /bin, /etc, /usr...  (0) 2022.07.25
[Linux] 리눅스 *.so.* 파일 경로: 동적 라이브러리 링킹하는 방법 (feat. 정적(static) vs 동적(dynamic))  (2) 2022.07.23
[Linux] 리눅스 프로세스 프로그래밍: fork() 자식 프로세스 생성하기  (0) 2022.07.19
[Linux] 리눅스 네트워크 상태 확인 (feat. ping, netstat...)  (0) 2022.07.19
[Linux] 리눅스 wget vs curl: 웹 서버로부터 컨텐츠를 가져오자!  (0) 2022.07.19
    'Study: ComputerScience(CS)/CS: Linux' 카테고리의 다른 글
    • [Linux] 리눅스 디렉토리(폴더) 구조: /home, /bin, /etc, /usr...
    • [Linux] 리눅스 *.so.* 파일 경로: 동적 라이브러리 링킹하는 방법 (feat. 정적(static) vs 동적(dynamic))
    • [Linux] 리눅스 프로세스 프로그래밍: fork() 자식 프로세스 생성하기
    • [Linux] 리눅스 네트워크 상태 확인 (feat. ping, netstat...)
    DrawingProcess
    DrawingProcess
    과정을 그리자!

    티스토리툴바