作者 | 瓊璞 ? ?責編 | 張紅月
來源 | 晚晴幽草軒(ID:nice-links)
curl 非常有用的命令行工具庫,用于通過 URL 傳輸數據。它的名字就是客戶端(client)的 URL 工具的意思(command line tool and library for transferring data with URLs)。它的功能非常強大,命令行參數多達幾十種。如能熟練使用,可以在很多應用場景下,發揮巨大的價值。本篇文章,就跟大家一起探討下 curl 以及關于它的那些妙用。
curl 是免費的開源軟件,截止 2021 年 2 月,最近穩定版本是 ?7.75.0;它支持包括 FTP、HTTP、HTTPS、FTP、SCP,SFTP 數十種協議;curl 在命令行或腳本中用于傳輸數據。另外,它還用于汽車,電視機,路由器,打印機,音頻設備,移動電話,平板電腦,機頂盒,媒體播放器中,并且是數千種每天影響數十億人口的軟件應用程序的互聯網傳輸基礎。如果您想了解更多關于 curl,可參見 curl.se 或 github.com/curl/curl。
curl https://nicelinks.site/
如上命令,不帶有任何參數時,curl 就是發出 GET 請求(向 nicelinks.site,服務器返回的內容會在命令行輸出。當然,你還可以為其添加各種參數(如 -A、-b、-c、-d、-e、-F、-H等等),使得可以完成更多復雜任務;
-e參數用來設置 HTTP 的標頭Referer,表示請求的來源。
curl?-e?'https://nicelinks.site?q=quickapp'?https://quickapp.lovejade.cn/
curl命令詳解。上面命令將Referer標頭設為https://nicelinks.site?q=quickapp。
--limit-rate用來限制 HTTP 請求和回應的帶寬,模擬慢網速的環境。下面命令將帶寬限制在每秒 200K 字節。
curl --limit-rate 200k https://nicelinks.site
-F 參數用來向服務器上傳二進制文件。如下命令會給 HTTP 請求加上標頭Content-Type: multipart/form-data,然后將文件example.png作為file字段上傳。
curl -F 'file=@example.png' https://example.com/files
-F參數可以指定 MIME 類型。如下命令指定 MIME 類型為image/png,否則 curl 會把 MIME 類型設為application/octet-stream。
curl?-F?'file=@example.png;type=image/png'?https://example.com/files
-F 參數也可以指定文件名。在下面的命令中,原始文件名為 example.png,但是服務器接收到的文件名為profile.png。
curl?-F?'file=@example.png;filename=me.png'?https://example.com/files
windows curl命令。上面,簡單列舉了些參數,以及具體作用;如果您想了解更多,可以參見:《cookbooks/curl》 或其中文翻譯版文章 curl 的用法指南;對于 curl 參數及功能說明,可參見 curl - How To Use,或 curl 命令(中文說明)。
直接在 curl 命令后加上網址,就可以看到網頁源碼。以及個人所維護的傾城之鏈來舉例:
curl https://nicelinks.site/
這里需要說明下的是,傾城之鏈前端基于 Vue 框架所構建的單頁應用(SPA);且未采取 SSR 方式來解決 SEO 及首頁渲染;因此您使用如上命令來請求,無論是針對哪些頁面,得到的都是一段項目首頁 html。為優化在非谷歌引擎 SEO 問題,基于 prerender,根據請求 url 是否攜帶_escaped_fragment_ 參數,走預渲染路線服務,從而解決 SEO;
curl https://nicelinks.site/\?_escaped_fragment_
基于如上命令,所獲得的內容,才是真正渲染后的網頁源代碼;關于在 Nginx 的配置,請參見如下代碼(3000 端口,為 prerender 服務);
if ($http_user_agent ~* "baiduspider|twitterbot|facebookexternalhit|rogerbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator") { set $prerender 1;}
if ($args ~ "_escaped_fragment_") { set $prerender 1;}
if ($prerender = 1) { set $prerender "127.0.0.1:3000";rewrite .* /$scheme://$host$request_uri? break; proxy_pass http://$prerender;}
如果您想保存文件到本地,只需添加 -o 參數即可,如下命令:
curl?-o?your-file-name.html?https://nicelinks.site/\?_escaped_fragment_
windows如何使用curl命令。很多網址是自動跳轉(或重定向)。使用-L參數,curl 就會跳轉到新的網址。
curl -L https://hacpai.com/
如上命令,就會跳轉到 ld246.com 新地址。需要補充說明的是,如果頁面在前端,通過修改 location.href 來跳轉,curl -L 這種方式,是無法“跟著“自動跳轉的。
通過 -v 參數,可以顯示一次 http 通信的整個過程,包括端口連接和 http request 頭信息,參見如下命令:
curl -v https://github.com
如果你想要更詳細的信息,可以通過下面的命令,查看更詳細的通信過程:
curl --trace output.txt https://github.com# or curl --trace-ascii output.txt https://github.com
更進一步,如果想知道,一次傳輸中所消耗時間(毫秒數),添加 --trace-time 參數即可:
curl?--trace-ascii?output.txt?--trace-time?https://github.com
curl工具安裝手機版,個人比較偏愛命令行工具,有時候也常用 curl 命令,來檢查某網站是否能正常工作。
發送表單信息,通常用 GET 和 POST 兩種方法。GET方 法相對簡單,只要把數據附在網址后面就行。
curl example.com/api/v1/profile?name=prfect-man
POST 方法必須把數據和網址分開,curl 就要用到 --data 參數,參加如下示例:
curl -X POST --data "file=xyz" example.com/api/v1/upload
如果你的數據沒有經過表單編碼,還可以讓 curl 為你編碼,參數是--data-urlencode:
curl?-X?POST--data-urlencode?"date=April?2"?example.com/api/v1/timedate
在傾城之鏈,先前收錄了一個短鏈接文 + 件托管服務:THE NULL POINTER,其使用示例如下(當然,上傳文件,在某些場景下,也可以 --form 來完成):
# 托管本地文件curl -F'file=@yourfile.png' https://0x0.st
# 托管線上文件curl -F'url=http://example.cn/img.jpg' https://0x0.st
curl -F'shorten=https://nicelinks.site' https://0x0.st
curl -L tool.lu/ip# orcurl -L ip.tool.lu
windows curl類似工具、“
當前IP: 119.120.121.122?
歸屬地: 中國 xx省 oo市
”
網站 wttr.in 支持命令行請求天氣預報,具體使用示例如下:
curl wttr.in
通過 curl 獲取天氣預報
這樣的服務,可謂比比皆是;當然,您也可以提供類似的服務,開放給同事、或者其他朋友,對效率很有幫助。而且,也無需提供前端界面,也能節省蠻多精力。倘若您需要些參考,How to Easily use cURL for HTTP Requests 是一篇值得推薦的短篇文章。
curl?-#?-o?pretty-gril.jpg?https://w.wallhaven.cc/full/9m/wallhaven-9mxjp8.jpg
談到下載這塊兒,利用正則循環下載(文件名一樣,部分尾號不同)、下載后重命名、分塊兒下載、通過 ftp 下載等等,在此就不一一展開說明了。
結尾
當然,如果您從事編程開發,可以用到 curl 更多功能,比如,基于 curl 命令從文件中讀取 cookie 信息、構造一個請求頭、模擬 User Agent 字段、偽造 referer 等等,鑒于篇幅,就不在此展示說明;如果您有興趣了解更多,可以參見 The Art Of Scripting HTTP Requests Using Curl;如果您有 curl 更多妙用方法,歡迎留言分享。
?虎牙被抬員工當事人再發聲;淘寶回應網店客服“看見”用戶未發送內容;Python 3.9.2 發布 | 極客頭條?Ant Design 被刪代碼已恢復,現登頂 GitHub Trending Top 2?「1s」即可!用 VS Code 一鍵玩轉 GitHub 代碼!
?Android 12 預覽版發布,64G手機用戶:我又活了
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态