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

results matching ""

    No results matching ""