cURL

운영체제로그/Linux 2011. 2. 18. 19:15

 

curl은 URL 문법을 사용해서 네트웍으로 데이터를 전송할 수 있는  커맨드 라인 툴로,  DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS,

IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP,SMTP, STMPS, TELNET 등 다양한 프로토콜을 지원한다. 

 

curl 명령에 -v 옵션을 사용하여,  curl 명령이 서버에 보내는 명령들을 볼 수 있다. 

 

웹페이지를 요청하는 다음과 같은 요청을 할 수 있다. 

curl http://curl.haxx.se

위와 같이 요청을 하면, 웹페이지 소스를 확인할 수 있다. 

 

-i 옵션을 사용하여, 헤더를 볼수 있으며, -I 옵션을 사용하여 헤더만 볼수도 있다.  

curl -I http://curl.haxx.se

 


GET 방식의 요청

curl "www.hotmail.com/when/junk.cgi?birthday=1906&press=OK"


POST 방식의 요청

curl -d "birthday=1905&press=OK" www.hotmail.com/when/junk.cgi

 

특수문자를 포함하기 위해서  curl에 --data-urlencode 옵션을 사용하여 인코딩할 수 있다. 

curl -data-urlencode "name=I am dDaniel" www.example.com

 

 

File Upload 하기 

 

위와 같이 html 문서내 파일업로드를 다음과 같은 curl 명령으로 수행할 수 있다. 

curl -F upload=@로컬파일이름 -F press=OK www.example.com

 

PUT 방식 

HTTP 서버에 데이터를 업로드하는 가장 좋은 방법은 PUT  을 사용하는 것이다. 물론 서버단에 HTTP PUT 스트림을

받는 방법을 아는 프로그램이나 스크립트가 존재해야한다. 파일을 HTTP 서버로 전송하는 명령이다 .

curl -T 파일 www.upload.com/receive.cgi

 

 

HTTP 인증 

HTTP  인증은 서버에 사용자명과 비밀번호를 전송하여 컨텐츠 접근권한을 허용받는 것이다. HTTP  는 디폴트로 순수 텍스트

기반 인증을 수행하기 때문에 비밀번호가 언제든지 네트워상에서 노출될 위험이 있다. 

curl -u name:password www.secret.com

사이트 마다 다른 인증방식을 요구할 수 있기때문에 서버로부터의 헤더를 확인하여, ---ntlm, --digest, --negotiate, -- anyauth 등

적합한 옵션을 주어야 할 수있다. 

 

User Agent 설정 

웹 요청시 User-Agent 헤더를 설정하여 원하는 버전의 웹페이지를 얻어 올 수 있다. 

 

Window에서 Internet  Explorer를 사용하고 있다면, 

curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" www.example.com

 

리눅스에서 Netscape를 사용하고 있다면, 

curl -A "Mozilla/4.0 [en] (X11; U; Linux 2.2.15 i686)"  www.example.com



curl을 사용하여 트위터에 tweet 하기

트위터 API를 사용에서 글을 트윗 하기 위해서, 인증을 거쳐야하는데 curl을 사용하여 인증처리 및 글을 등록해보자!

--basic --user 사용자명:비밀번호

옵션을 사용하여 Basic Auth 을 처리할 수 있다. 그을 트윗하는 완전한 예는 다음과 같다. 

 

curl --basic --user 사용자명:비밀번호 --data status="my test tweet!!" http:// twitter.com/statuses/update.xml

 

 

세션쿠키값을 파일에 저장하여 로그인상태 유지하기

트위터의 특정 사람에게 DM을 보내기 위해 로그인 처리를 다음과 같이 할 수 있다. 

curl --cookie /tmp/cookies.txt --cookie-jar /tmp/cookies.txt --user-agent Mozilla/4.0 --data 
'username=사용자명' --data 'password=비밀번호' --data 'commit=Sign In' http://twitter.com/login

 

--cookie /tmp/cookies.txt --cookie-jar /tmp/cookies.txt

위 옵션은 /tmp/cookies.txt 파일에서 쿠키를 읽어오고 저장하게 한다.  최초에 빈파일이지만, 로그인 완료되면 세션쿠키가 해당 파일에

저장되게 된다. 이후 요청에서는 이 쿠키를 읽어서 별도의 인증과정 없이  아래와 같이 DM을 전송 할 수 있다. 

 

curl --cookie /tmp/cookies.txt --cookie-jar /tmp/cookies.txt --user-agent Mozilla/4.0 --data
"text=보낼 메시지를 이곳에" --data 'commit=Send' http://twitter.com/direct_messages/create/대상사용자아이디(숫자)


이 글은 스프링노트에서 작성되었습니다.