åæé¾æ¥ï¼[url]http://www.ruanyifeng.com/blog/2011/09/curl.html[/url]
curlç½ç«å¼åæå
ä½è ï¼ é®ä¸å³°
æ¥æï¼ 2011å¹´9æ 4æ¥
æä¸å以为ï¼curlåªæ¯ä¸ä¸ªç¼ç¨ç¨çå½æ°åºã
æè¿æåç°ï¼è¿ä¸ªå½ä»¤æ¬èº«ï¼å°±æ¯ä¸ä¸ªæ æ¯æç¨çç½ç«å¼åå·¥å ·ï¼è¯·çææ´ççå®çç¨æ³ã
===================================
curlç½ç«å¼åæå
é®ä¸å³° æ´ç
curlæ¯ä¸ç§å½ä»¤è¡å·¥å ·ï¼ä½ç¨æ¯ååºç½ç»è¯·æ±ï¼ç¶åå¾å°åæåæ°æ®ï¼æ¾ç¤ºå¨"æ åè¾åº"ï¼stdoutï¼ä¸é¢ã
å®æ¯æå¤ç§åè®®ï¼ä¸é¢ä¸¾ä¾è®²è§£å¦ä½å°å®ç¨äºç½ç«å¼åã
ä¸ãæ¥çç½é¡µæºç
ç´æ¥å¨curlå½ä»¤åå ä¸ç½åï¼å°±å¯ä»¥çå°ç½é¡µæºç ãæ们以ç½åwww.sina.com为ä¾ï¼éæ©è¯¥ç½åï¼ä¸»è¦å 为å®çç½é¡µä»£ç è¾çï¼ï¼
ããcurl www.sina.com
ãã<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
ãã<html><head>
ãã<title>301 Moved Permanently</title>
ãã</head><body>
ãã<h1>Moved Permanently</h1>
ãã<p>The document has moved <a href="http://www.sina.com.cn/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >here</a>.</p>
ãã</body></html>
å¦æè¦æè¿ä¸ªç½é¡µä¿åä¸æ¥ï¼å¯ä»¥ä½¿ç¨-oåæ°ï¼è¿å°±ç¸å½äºä½¿ç¨wgetå½ä»¤äºã
ããcurl -o [æ件å] www.sina.com
äºãèªå¨è·³è½¬
æçç½åæ¯èªå¨è·³è½¬çã使ç¨-Låæ°ï¼curlå°±ä¼è·³è½¬å°æ°çç½åã
ããcurl -L www.sina.com
é®å ¥ä¸é¢çå½ä»¤ï¼ç»æå°±èªå¨è·³è½¬ä¸ºwww.sina.com.cnã
ä¸ãæ¾ç¤ºå¤´ä¿¡æ¯
-iåæ°å¯ä»¥æ¾ç¤ºhttp responseç头信æ¯ï¼è¿åç½é¡µä»£ç ä¸èµ·ã
ããcurl -i www.sina.com
ããHTTP/1.0 301 Moved Permanently
ããDate: Sat, 03 Sep 2011 23:44:10 GMT
ããServer: Apache/2.0.54 (Unix)
ããLocation: http://www.sina.com.cn/
ããCache-Control: max-age=3600
ããExpires: Sun, 04 Sep 2011 00:44:10 GMT
ããVary: Accept-Encoding
ããContent-Length: 231
ããContent-Type: text/html; charset=iso-8859-1
ããAge: 3239
ããX-Cache: HIT from sh201-9.sina.com.cn
ããConnection: close
ãã<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
ãã<html><head>
ãã<title>301 Moved Permanently</title>
ãã</head><body>
ãã<h1>Moved Permanently</h1>
ãã<p>The document has moved <a href="http://www.sina.com.cn/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >here</a>.</p>
ãã</body></html>
-Iåæ°åæ¯åªæ¾ç¤ºhttp responseç头信æ¯ã
åãæ¾ç¤ºéä¿¡è¿ç¨
-våæ°å¯ä»¥æ¾ç¤ºä¸æ¬¡httpéä¿¡çæ´ä¸ªè¿ç¨ï¼å æ¬ç«¯å£è¿æ¥åhttp request头信æ¯ã
ããcurl -v www.sina.com
ãã* About to connect() to www.sina.com port 80 (#0)
ãã* Trying 61.172.201.195... connected
ãã* Connected to www.sina.com (61.172.201.195) port 80 (#0)
ãã> GET / HTTP/1.1
ãã> User-Agent: curl/7.21.3 (i686-pc-linux-gnu) libcurl/7.21.3 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
ãã> Host: www.sina.com
ãã> Accept: */*
ãã>
ãã* HTTP 1.0, assume close after body
ãã< HTTP/1.0 301 Moved Permanently
ãã< Date: Sun, 04 Sep 2011 00:42:39 GMT
ãã< Server: Apache/2.0.54 (Unix)
ãã< Location: http://www.sina.com.cn/
ãã< Cache-Control: max-age=3600
ãã< Expires: Sun, 04 Sep 2011 01:42:39 GMT
ãã< Vary: Accept-Encoding
ãã< Content-Length: 231
ãã< Content-Type: text/html; charset=iso-8859-1
ãã< X-Cache: MISS from sh201-19.sina.com.cn
ãã< Connection: close
ãã<
ãã<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
ãã<html><head>
ãã<title>301 Moved Permanently</title>
ãã</head><body>
ãã<h1>Moved Permanently</h1>
ãã<p>The document has moved <a href="http://www.sina.com.cn/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >here</a>.</p>
ãã</body></html>
ãã* Closing connection #0
å¦æä½ è§å¾ä¸é¢çä¿¡æ¯è¿ä¸å¤ï¼é£ä¹ä¸é¢çå½ä»¤å¯ä»¥æ¥çæ´è¯¦ç»çéä¿¡è¿ç¨ã
ããcurl --trace output.txt www.sina.com
æè
ããcurl --trace-ascii output.txt www.sina.com
è¿è¡åï¼è¯·æå¼output.txtæ件æ¥çã
äºãåé表åä¿¡æ¯
åé表åä¿¡æ¯æGETåPOST两ç§æ¹æ³ãGETæ¹æ³ç¸å¯¹ç®åï¼åªè¦ææ°æ®éå¨ç½ååé¢å°±è¡ã
ããcurl example.com/form.cgi?data=xxx
POSTæ¹æ³å¿ é¡»ææ°æ®åç½ååå¼ï¼curlå°±è¦ç¨å°--dataåæ°ã
ããcurl --data "data=xxx" example.com/form.cgi
å¦æä½ çæ°æ®æ²¡æç»è¿è¡¨åç¼ç ï¼è¿å¯ä»¥è®©curlä¸ºä½ ç¼ç ï¼åæ°æ¯--data-urlencodeã
ããcurl --data-urlencode "date=April 1" example.com/form.cgi
å ãæ件ä¸ä¼
åå®æ件ä¸ä¼ ç表åæ¯ä¸é¢è¿æ ·ï¼
ãã<form method="POST" enctype='multipart/form-data' action="upload.cgi">
ãããã<input type=file name=upload>
ãããã<input type=submit name=press value="OK">
ãã</form>
ä½ å¯ä»¥ç¨curlè¿æ ·ä¸ä¼ æ件ï¼
ããcurl --form [email protected] --form press=OK [URL]
ä¸ãRefererå段
ææ¶ä½ éè¦å¨http request头信æ¯ä¸ï¼æä¾ä¸ä¸ªrefererå段ï¼è¡¨ç¤ºä½ æ¯ä»åªé跳转è¿æ¥çã
ããcurl --referer http://www.example.com http://www.example.com
å «ãUser Agentå段
è¿ä¸ªå段æ¯ç¨æ¥è¡¨ç¤ºå®¢æ·ç«¯ç设å¤ä¿¡æ¯ãæå¡å¨ææ¶ä¼æ ¹æ®è¿ä¸ªå段ï¼é对ä¸å设å¤ï¼è¿åä¸åæ ¼å¼çç½é¡µï¼æ¯å¦ææºçåæ¡é¢çã
iPhone4çUser Agentæ¯
ããMozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
curlå¯ä»¥è¿æ ·æ¨¡æï¼
ããcurl --user-agent "[User Agent]" [URL]
ä¹ãcookie
使ç¨--cookieåæ°ï¼å¯ä»¥è®©curlåécookieã
ããcurl --cookie "name=xxx" www.example.com
è³äºå ·ä½çcookieçå¼ï¼å¯ä»¥ä»http response头信æ¯çSet-Cookieå段ä¸å¾å°ã
åãå¢å 头信æ¯
ææ¶éè¦å¨http requestä¹ä¸ï¼èªè¡å¢å ä¸ä¸ªå¤´ä¿¡æ¯ã--headeråæ°å°±å¯ä»¥èµ·å°è¿ä¸ªä½ç¨ã
ããcurl --header "xxx: xxxxxx" http://example.com
åä¸ãHTTP认è¯
æäºç½åéè¦HTTP认è¯ï¼è¿æ¶curléè¦ç¨å°--useråæ°ã
ããcurl --user name:password example.com