Curl
名字
curl - transfer a URL
梗概
curl [options] [URL...]
参数
-v, --verbose
使抓取时更加啰嗦/健谈。对debugger很有用。 以 '>' 开始的行表示由curl发送的'头数据', '<'表示由curl接收的'头数据',这些信息在一般情况下会隐藏,以'*'开始的行表示由curl额外提供的信息。
如果你仅想HTTP头在输出中, -i, --include 可能是你想要寻找的参数。
如果你认为此选项仍没有给你足够的详细信息,考虑使用--trace 或 --trace-ascii
前选项覆盖前面使用的--trace-ascii 或 --trace
使用 -s, --silent 来使curl更加安静-H, --header <header>
(HTTP)当获取一个web网页时使用的额外的头信息。你可以指定任意数据的额外的头信息。注意如你添加一些自定义的请求头与curl内置使用的一样,你显示设置的头将会被使用而不是内置的。这允许你作一些比curl正常的更复杂的一些东西。在你不知道内置的请求头的具体作用时,最好不要设置替换内置的请求头。移除一个内置的请求头可以通过像 -H "Host:" 这种分号右侧没有具体的内容来移除。如果你发送一人自定义的请求头且没有值,那么这个一定要以分号结尾,例如 -H "X-Custom-Header;" 来发送 "X-Customer-Header:"。curl将会确保你添加/替换的每个请求头时具有正确的行结束标记,你不应该在把其作为头内容的一部分添加:不要添加换行或回车, 这指会使你更加混乱。
查看-A --user-agent 和 -e, --referer选项
此选项可以多次使用来添加/替换/移除 多个请求头。
-i, --include
(HTTP)在输出中包括HTTP头。HTTP头包括像服务名,文档的日期,HTTP版本或更多
输出的实际上是HTTP响应头-I, --head
(HTTP/FTP/FILE) 仅获取HTTP-header!仅获取文档的头部,当用于FTP或FILE文件时,curl仅展示文件的大小和上一次修改的时间-v --verbose 使操作更加健谈
比如你想看到请求头和响应头-d, --data 传递参数
注意:如果键值对只有一个的话,可以不写双引号,但是如果有多个键值对,必须加上双引号,键值对这间用&链接
-L 重写向
如果登陆后网页被重定向,而我们想追踪这个重定向的链接的话可以加上-L参数,表示追踪重定向-b 携带登陆信息进行post请求需要使用-b选项
用-b指定使用哪个文件-F 模拟表单上传文件 相当于form表单中method="POST"和enctype="multipart/form-data" 这个时候就需要用到-F选项了
curl -F "key=@value" "url"
假目前我们的文件上传表单是这样的
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="myfile" />
<button type="submit" value="submit" />
</form>
我们想提交一个名为hellocurl.zip的文件,该文件在我们指令所在的根目录下。
那我们的curl就是这样的
curl -F "[email protected]" "www.xxx.com/upload"
如果上传的文件不止一个,可以写多个 -F "key=@value"
curl -F "[email protected]" -F "[email protected]" "www.xxx.com/upload"
再来看一个更加贴近实际的情况:很多时候,我们的表单还会包含许多其他表单元素,如text, checkbox, select等等
现在我们在上面表单的基础上加入更多元素,变成下面这样:
<form action="upload" method="post" enctype="multipart/form-data">
<span style="color:#990000;">
<input type="text" name="filename" value="hellocurl"/></span>
<input type="file" name="myfile" />
<button type="submit" value="submit" />
</form>
同时我们想提交hellocurl.zip文件
这时候我们可能会想到加上-d
物别注意,这个时候我们不能同时使用-d和-F,这2个选项在curl中是两种方式的请求,-d为application/x-www-url-encoded方式发送post请求,而-F为multipart/form-data方式。如果在一次curl中同时使用-d和-F选项会报Warning:You can only select one HTTP request!的警告,导致指令无法执行。
这种情况下,现在网上很多给出的解决方案是通过增加-F的方式来解决
curl -F "filename=hellocurl" -F "[email protected]" "www.xxx.com/upload"
但是我在一个spring-mvc的项目中测试这个方法的时候,由于拿不到filename的值,无法绕过服务器的验证,导致提交失败
如果你也碰到类似的情况,可以尝试以下解决方法:
curl -F "key=@value" "www.xxx.com/upload?key1=value1&key2=value2"
- -o, --output <file> 把输出写入到文件,而不是标准输出。如果你使用{}或者[]来获取多个文档的话,你可以在文件名处使用#号接数字的方式指定文件名。这样的变量将会被URL中的字符串替换。向下面:
curl http://{one,two}.example.com -o "file_#1.txt"
或向下面使用变量:
curl http://{site,host}.host[1-5].com -o "#1_#2"
当URL出现几次,此选项也可以出现几次。例如,如果你指定了两个URL在同一个命令上,你可以像这样使用:
curl -o aa example.com -o bb example.net
-o选项与URL的顺序并不重要,第一个-o匹配第一个URL。上面的命令行也可以被写成下面的形式:
curl example.com example.net -o aa -o bb