728x90

CURL 이란? cURL = Client URL

 

클라이언트에서 커맨드 라인이나 소스코드로 손 쉽게 웹 브라우저 처럼 활동할 수 있도록 해주는 기술(커맨드라인 Tool 혹은 라이브러리)

 

서버와 통신할 수 있는 커맨드 명령어 툴이다. 웹개발에 매우 많이 사용되고 있는 무료 오픈소스이다 curl의 특징으로는 다음과 같은 수 많은 프로토콜을 지원한다는 장점이 있다.

다양한 지원 프로토콜들
DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet, TFTP

또한 SSL 인증 방식 역시 가능하다.

 

url을 가지고 할 수 있는 것들은 다할 수 있다. 예를 들면, http 프로토콜을 이용해 웹 페이지의 소스를 가져온다거나 파일을 다운받을 수 있다. ftp 프로토콜을 이용해서는 파일을 받을 수 있을 뿐 아니라 올릴 수도 있다. 심지어 SMTP 프로토콜을 이용하면 메일도 보낼 수 있다

 

여기서 내가 가장 잘 알고 있는 프로토콜은 역시나 HTTP와 HTTPS이다. 

HTTP 통신은 프로젝트에서도 많이 사용해 봤기 때문에 익숙하다.

 

사용법

  • curl [-option] https://shutcoding.tistory.com 하게되면 소스가 화면으로 출력된다.
  • 이외에 옵션을 이용하여 사용할 수 있다.

주요 옵션

-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 기반의 웹서비스 디버깅시 유용한 옵션이다
-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 만 가져오거나 할 경우 유리

 

 

 

가장 많이 사용하는 프로토콜들 몇 가지를 알아보겠다.

 

 

 

첫 번째, HTTP 프로토콜이다.

 

HTTP: HTTP(Hypertext Transfer Protocol)는 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜 이다. 애플리케이션 레벨의 프로토콜로 TCP/IP위에서 작동한다.

가장 성공적인 인터넷 프로토콜이다. HTTP가 없었다면 인터넷은 지금과는 전혀 다른 모습이였을거다.HTTP는 어떤 종류의 데이터든지 전송할 수 있도록 설계돼 있다. 인터넷상에서 흔히 볼수 있는 HTML로 작성된 문서는 HTTP로 보낼 수 있는 데이터의 한 종류일 뿐이다. 이미지, 동영상, 오디오, 텍스트 문서들 아무튼 종류를 가리지 않는다.Transfer라는 해석 그대로 데이터를 전송하겠다라는 의미로 앞에 Hypertext 가 붙은 이유는 하이퍼텍스트 기반으로 데이터를 전송하겠다는. 간단히 말해서 링크기반으로 데이터에 접속하겠다는 의미가 되겠다.

 

HTTP는 서버/클라이언트 모델을 따른다. 클라이언트에서 요청(request)를 보내면 서버는 요청을 처리해서 응답(response)한다.

  1. 클라이언트 : 서버에 요청하는 클라이언트 소프트웨어가 설치된 컴퓨터. chrom, firefox, ie등의 클라이언트 소프트웨어를 이용한다. 클라이언트는 URI를 이용해서 서버에 접속하고, 데이터를 요청할 수 있다.
  2. 서버 : 클라이언트의 요청을 받아서, 요청을 해석하고 응답을 하는 소프트웨어가 설치된 컴퓨터. Apache, nginx, IIS, lighttpd 등이 서버 소프트웨어다.

웹서버는 보통 표준포트인 80번 포트로 서비스한다.

 

 

 

두 번째, FTP 프로토콜이다.

 

Fileile Transfer Protocol의 줄임말이다. 하나의 호스트에서 다른 호스트로 파일을 옮기기 위한 TCP기반 프로토콜이다. 보통 FTP는 웹상에 파일을 올리기 위한 목적으로 널리 사용되고 있다. FTP는 서버&클라이언트 모델을 따른다. 클라이언트는 서버에 연결해서 파일 업로드 및 다운로드 요청을 하고, 요청을 받은 서버가 응답 데이터로 파일을 전송하거나 수신한다. 

 

 

 

세 번째, STMP 프로토콜이다.

 

간이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP)은 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜이다. 사용하는 TCP 포트번호는 25번이다. 상대 서버를 지시하기 위해서 DNS의 MX레코드가 사용된다. RFC2821에 따라 규정되어 있다. 메일 서버간의 송수신뿐만 아니라, 메일 클라이언트에서 메일 서버로 메일을 보낼 때에도 사용되는 경우가 많다.

SMTP는 텍스트 기반의 프로토콜로서 요구/응답 메시지뿐 아니라 모든 문자가 7bit ASCII로 되어있어야 한다고 규정되어 있다. 이 때문에 문자 표현에 8비트 이상의 코드를 사용하는 언어나 첨부파일과 자주 사용되는 각종 바이너리는 마임(MIME)이라고 불리는 방식으로 7비트로 변환되어 전달된다.

SMTP는 메시지를 생성하는 방법을 규정하지 않는다. 메시지 생성을 위하여 로컬 편집이나 단순한 전자 우편 응용이 사용된다. 메시지가 생성되면 호출된 SMTP가 메시지를 받고 TCP를 이용하여 다른 호스트의 SMTP에게 전달한다.

 

 

네 번째, TELNET이다.

 

텔넷.tele network의 준말. 멀리 떨어진 컴퓨터에 연결해 이쪽 컴퓨터를 그쪽에 연결된 터미널로 만들어 주는 인터넷 표준 프로토콜이다. 흔히 컴퓨터 통신을 할 때 쓰는 이야기 등과 같은 터미널 에뮬레이터를 생각하면 된다. 다만 텔넷은 인터넷을 통해서 연결된다는 점만이 다르다. 실제로 하이텔이나 천리안 등 PC통신도 인터넷에 연결하면 텔넷으로 들어갈 수 있다. 텔넷 접속을 하기 위해서는 일반 통신프로그램이나 텔넷 전용 프로그램이 필요하다.

 

 

 

꿀팁 몇가지

 

curl 로 파일전송

- curl -v -F 'group=@/home/cmail/group_list.txt' "000.000.000.000/api/test?domain=xxx.xx.xx&type=group"

-F옵션으로 파일자체를 전송가능, 받을때는 각 랭귀지의 파일받는 함수로 받으면 된다.

ex)php

    move_uploaded_file($_FILES[$type]['tmp_name'],"/tmp/log/{$type}_list.txt");

curl 로 post전송

curl -X POST -v -d @/home/cmail/group_list.txt -d type=group 000.000.000.000/api/test

curl -X POST http://www.test.te.st/test/ -d @curl.json -H "Content-Type: application/json"

728x90

'기타' 카테고리의 다른 글

정규식  (0) 2020.08.21
SQLD 3일만에 합격한 후기  (0) 2020.08.11
HTTP상태코드의 종류와 의미  (0) 2020.02.10
Git 커밋 상태를 확인하여 배포하는 쉘 스크립트  (0) 2020.02.08
도메인, DNS, A레코드, CNAME ??  (0) 2020.02.08

+ Recent posts