cURL有关HTTP的命令


文章自用,看看无妨,建议看看原文

保存curl命令发送和接受的所有数据到文本save.txt中:

<pre>curl --trace save.txt [url]</pre>

<pre>curl --trace-ascii save.txt [url]</pre>

查看用时(毫秒):

<pre>curl --trace-ascii save.txt --trace-time [url]</pre>

重定向返回数据(默认输出到stdout):

<pre>curl [-o | -O] save.txt [url]</pre>

重置主机IP:

<pre>curl --resolve [host:port]:[new ip] [url]
curl --resolve www.example.org:80:127.0.0.1 http://www.example.org/</pre>

显示声明端口号:

<pre>curl [url]:port
curl http://www.example.org:1234/
curl --proxy http://proxy.example.org:4321 http://remote.example.org/</pre>

用户名和密码:

<pre>curl http://user:password@example.org/
curl -u user:password http://example.org</pre>

获取页面

GET

<pre>curl https://curl.haxx.se 响应头是隐藏的</pre>

<pre>curl --include https://curl.haxx.se 在前面显示响应头信息</pre>

HEAD

<pre>curl --head(-l) http://curl.haxx.se</pre>

在一条命令行指定多个URL

<pre>curl http://url1.example.com http://url2.example.com
curl --data name=curl http://url1.example.com http://url2.example.com
数据会通过POST传送给每个URL
</pre>

一个命令行使用多个URL,每个URL使用不同的请求方法

<pre>curl -l http://example.com --next http://example.com</pre>
<pre>curl -d score=10 http://example.com/post.cgi --next http://example.com/results.html</pre>

--next类似一个分隔符,分割每个url和数据,分割的每一块相当于一个新的curl命令。

HTML表单

GET

<form method="GET" action="junk.cgi">
<input type=text name="birthday">
<input type=submit name=press value="ok">
</form>

<pre>curl "http://www.hotmail.com/when/junk.cgi?birthyear=1905&press=ok;"
表单所在页面的URL是www.hotmail.com/when/birth.html
</pre>

POST

<form method="POST" action="junk.cgi">
<input type=text name="birthyear">
<input type=submit name=press value=" ok ">
</form>

<pre>curl --data "birthyear=1905&press=%20OK%20" http://www.example.com/when.cgi</pre>

Content-Type=application/x-www-form-urlencoded]curl默认不会将数据编码,如果数据中包含空格,必须手动编码为%20,最新版的curl可以通过下面的参数将数据编码:

<pre>curl --data-urlencoded "name=I am Daniel" http://www.example.com</pre>

如果多次使用--data参数,curl会使用&将每个--data后面的数据合并起来。

POST文件上传

<from method="POST" enctype='multipart/from-data' action="upload.cgi">
<input type=file name=upload>
<input type=submit name=press value="OK">
</form>

<pre>curl --form upload=@localfilename --form press=OK [url]
注意这个Content-Type是multipart/form-data。
</pre>

隐藏字段

<form method="POST" action="foobar.cgi">
<input type=text name="birthyear">
<input type=hidden name="person" value="daniel">
<input type=submit name="press" value="OK">
</form>

<pre>curl --data "birthyear=1905&press=OK&person=daniel" [url]
对于curl来说隐藏的字段和显示的字段都是一样的。</pre>

HTTP认证

基础认证

<pre>curl --user name:password http://www.example.com
简单的混淆,截取后还是完全可读的。
</pre>

其它认证

根据响应头首部服务器可能会要求其它的认证方法,选择使用参数--ntlm--digest--negotiate--anyauth

代理认证

<pre>curl --proxy-user proxyuser:proxypassword curl.haxx.se
如果代理要求NTLM方法认证,使用--proxy-ntlm,如果是Digest方法认证,使用参数--proxy-digest。
</pre>

注意

值得注意的是当一个程序运行的时候,它的参数可能通过列出系统运行的进程看到。因此,假如你把用户认证信息作为命令行的参数传入,其他用户是可以看到这些参数值的。

更多HTTP头

Referer

<pre>curl --referer [referer url] [url]
curl --referer http://www.example.come http://www.example.com
从上面也可以很容易地看出referer其实是很容易伪造的。
</pre>

User Agent

让curl的请求看起来像是从Windows 2000上的IE5发出的:

<pre>curl --user-agent "Mozilla/4.0(compatible;MSIE 5.01;Windows NT 5.0)" [URL]</pre>

下面使得curl的请求看起来像是从一台老旧的Linux上Netscape4.73发出的:

<pre>curl --user-agent "Mozilla/4.73[en](X11;U;Linux2.2.15 i686)" [URL]</pre>

重定向

Location

<pre>curl --location http://www.example.com</pre>

其它重定向

浏览器一般还支持两种重定向的方法而curl不支持:一种是HTML可能会包含meta refresh标签可以让浏览器在指定时间后加载指定URL,另一种是用javascript这样做。

Cookies

Cookie参数

一个带cookie的请求:

<pre>curl --cookie "name=Daniel" http://www.example.com</pre>

通过保存响应头信息来保存cookies,可以使用--dump-header(或者-D)响应头信息:

<pre>curl --dump-header headers_and_cookies.txt http://www.example.com</pre>

使用之前保存的cookiescurl命令:

<pre>curl --cookie stored_cookies.txt http://www.example.com</pre>

贴出原文,没明白干啥:
Curl's "cookie engine" gets enabled when you use the --cookie option. If you only want curl to understand received cookies, use --cookie with a file that doesn't exist. Example, if you want to let curl understand cookies from a page and follow a location (and thus possibly send back cookies it received), you can invoke it like:

<pre>curl --cookie nada --location http://www.example.com</pre>

curl可以读写Netscape和Mozilla曾经用过的文件格式的cookie文件。--cookie(-b)可以自动识别给定的文件是否是这种文件格式并解析它,同时使用--cookie-jar(或-c)参数可以在一个请求操作之后将cookie写入一个文件。

<pre>curl --cookie cookie.txt --cookie-jar newcookie.txt http://www.example.com</pre>

HTTPS

HTTP是安全的HTTP

HTTP是建立在SSL(或者这个标准的最新版本TLS)上的HTTP,SSL会把通过网络发送和接受的数据加密,使得攻击者很难窥探敏感信息。使用curl从HTTPS服务器获得页面:

<pre>curl https://secure.example.com</pre>

认证证书

在HTTPS的世界里,除了一般的密码外使用证书证明你是谁。curl支持客户端证书。所有的证书被一个口令保护,这样在curl使用证书之前你必须通过这个口令。口令可以通过命令行声明,当curl需要使用这个证书的时候会自动进入口令验证。在HTTPS服务器上使用带证书的curl:

<pre>curl --cert mycert.pem https://secure.example.com</pre>

curl也会通过严重服务器的证书来证明服务器声明的身份,如果验证失败curl将拒绝和这个服务器连接,可以使用参数--insecure(-k)忽略服务器不能被验证。

更多关于服务器证书验证以及ca cert bundles可以参读SSLCERTS文档

还明白什么意思,先粘贴在这里:At times you may end up with your own CA cert store and then you can tell curl to use that to verify the server's certificate:

<pre>curl --cacert ca-bundle.pem https://example.com</pre>

自定义请求元素

改变请求方法和请求头

通过--header参数可以自定义请求头,通过--request可以改变请求方法,下面的例子好好领会一下:

<pre>curl --data "<xml>" --header "Content-Type: text/xml" --request PROPFIND url.com</pre>

上面的例子将POST请求方法变成PROPFIND,发送的描述实体主体的首部由默认的Content-Type变为”Content-Type“。

可以通过提供忽略头部值的头部来删除对应首部:

<pre>curl --header "Host:" http://www.example.com</pre>

通过提供新的头部值来自定义头部,或者提供带属性值的新的头部来增加头部:

<pre>curl --header "Destination: http://anywhere.com" http://example.com</pre>

更多的关于改变请求方法

值得一提的是curl会根据请求的action来选择使用哪个请求方法,例如-d时curl会选择POST方法,-l时curl会选择HEAD方法,以此类推。假如你使用--request/-X会改变curl选择的方法关键字,但是并不会改变curl的行为。这也意味着,当你用-d"data""去作一个POST请求,你可以通过-X将方法改变为PROPFIND,但是curl还是认为它发出的是一个POST请求。可以改变默认GET方法为POST通过如下命令:

<pre>curl -X POST http://example.org</pre>

参考

RFC 7230 如果想要深入理解HTTP协议这是必读的文档
RFC 3986 解释URL语法
RFC 1867 定义HTTP基于HTML表单的文件上传
RFC 6525 定义HTTP cookies是如何工作的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,192评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,186评论 1 303
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,844评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,471评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,876评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,891评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,068评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,791评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,539评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,772评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,250评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,577评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,244评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,146评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,949评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,995评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,812评论 2 276

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,106评论 18 139
  • 一、什么是CURL? cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、...
    伊Summer阅读 1,188评论 0 4
  • 转载自:http://www.cnblogs.com/txw1958/archive/2013/01/19/286...
    php_bruce阅读 1,752评论 1 5
  • HTTP cookie(也称为web cookie,网络cookie,浏览器cookie或者简称cookie)是网...
    留七七阅读 17,478评论 2 71
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,300评论 6 152