미분류/Tip

curl 방식으로 mailgun 사용해보면서 익히는 curl

DarrenKwonDev 2020. 11. 26. 22:43

Curl?

 

curl은 다양한 프로토콜을 지원하는 데이터 전송용 Command Line Tool이다.

DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet, TFTP... 많네요.

 

리눅스에서는 내장이 아니므로 사용하기 위해 당연히 설치해야 한다.

sudo apt-get install curl

 

필자의 윈도우에는 curl이 이미 설치되어 있었다. curl --version로 확인해보자

C:\Users\PC>curl --version
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: [unreleased]
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL

 

 

cURL 간략한 사용 방법

 

curl https://www.google.com
curl -i https://www.google.com
  • method 명시 없이 그냥 쓰면 GET이다.
  • -i : 헤더 + 바디 가져오기
  • -I : 헤더만 가져오기

 

curl -X POST \
  -H "X-Parse-Application-Id: parse-app-id" \
  -H "X-Parse-REST-API-Key: parse-api-key" \
  -H "Content-Type: application/json" \
  -d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}' \
  https://api.parse.com/1/classes/GameScore
  • -X : method
  • -H : http header
  • -d : http POST data. 이 옵션을 주면 method가 자동으로 POST로 지정된다.

 

-d, -H, -X를 자주 사용한다.

 

-d, --data: <data> Send specified data in POST request.

-H, --header: <header> Headers to supply with request.

-X, --request: The request method to use. ex) GET, POST

 

따라서 자주 사용하는 꼴은 다음과 같이 된다.

curl -d "key1=value1&key2=value2" \
-H "Content-Type: application/x-www-form-urlencoded" \
-X POST http://localhost:8000/data

 

window curl에서 주의할 점이 있다.

# 원도우 curl에서는 '를 "로 변경하고, "를 ""로 변경하고 호출해야한다.
curl -d "{""key1"":""value1"", ""key2"":""value2""}" \
-H "Content-Type: application/json" \
-X POST http://localhost:8000/data

 

워낙 옵션이 많아서 다 외우기보다 필요할 때 찾아보자

 

www.lesstif.com/software-architect/curl-http-get-post-rest-api-14745703.html

www.serverguide.co.kr/entry/curl-CURL-%EC%82%AC%EC%9A%A9%EB%B2%95

 

 

curl 방식으로 mailgun을 사용해보자

 

mailgun 패키지를 설치하지 않고 curl 요청을 보내는 것을 응용하여 메일을 보내보려고 합니다.

curl -s --user 'api:YOUR_API_KEY' \
	https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
	-F from='Excited User <mailgun@YOUR_DOMAIN_NAME>' \
	-F to=YOU@YOUR_DOMAIN_NAME \
	-F to=bar@example.com \
	-F subject='Hello' \
	-F text='Testing some Mailgun awesomeness!'

 

사용된 옵션에 대한 설명은 다음과 같다.

 

-s

정숙 모드. 진행 내역이나 메시지등을 출력하지 않는다. -o 옵션으로 remote data 도 /dev/null 로 보내면 결과물도 출력되지 않는다

 

--user

--user (or -u) in curl provides a basic auth to your request.

 

조금 자세히 설명해보자. curl에 -v(verbose)를 찍어서 --user에 아무 값이나 주어보았다.

curl https://cineps.net -v --user hello
Enter host password for user 'hello': ...

// http 메세지를 해보니
> GET / HTTP/1.1
> Host: cineps.net
> Authorization: Basic aGVsbG86ZWFkZ2I=
> User-Agent: curl/7.55.1
> Accept: */*

 

Authorization 헤더에 Basic [base64 encoded text] 가 전달되는 것을 확인할 수 있다.

username:password 꼴의 텍스트를 base64로 인코딩한 것이다.

Basic은 http 인증에 가장 일반적인 스킴이며 oauth나 realm 등 여러 스킴이 존재합니다.

 

mailgun의 경우에는 api:[your api key] 꼴이니 이를 base 64 형식으로 인코딩해주면 되겠다.

 

 

-F

form-data (-d와의 차이는 ec.haxx.se/http/http-postvspost 여기를 참고)