曲径通幽论坛

标题: curl -- 网络瑞士军刀 [打印本页]

作者: beyes    时间: 2009-6-6 12:21
标题: curl
-D 参数
把 header 写到指定文件中。
当你需要存储 HTTP 页面发来的 header 时可用此选项。从 headers 里来的 cookies 在接着的 curl 调用中可以通过使用 -b/--cookie 选项对其读取。
-c/--cookie-jar 选项也是一个存储 cookie 信息的好方法。
在使用 FTP 时,FTP 服务器的相应行被当作 header 。
如果此选项被使用多次,有效的是最后一个。
作者: beyes    时间: 2010-4-10 10:31
标题: curl -- 网络瑞士军刀
1. 得到百度搜索结果页的页号
curl -o baidu2.html 'http://www.baidu.com/s?wd=%B2%C6%BE%AD&pn=20'
注意,后面的网址要用单引号括起来,否则会被忽略掉 &pn=20 后的内容。pn=0 表示搜索结果的第 1 页,pn=10 表示搜索结果的第 2 页。

2. 如果网址中含有如 & 这样的符号,要用双引号将网址括起来,否则网址会被从 & 截断,造成提交失败,如:
curl -A "Mozilla/4.0" -d "formhash=${tidhash}&subject=&usesig=0&message=okle8888" -b bbscookie.txt -o ok.html "http://192.168.1.102/dz/post.php?action=reply&fid=2&tid=2&extra=page=1&replysubmit=yes&infloat=yes&handlekey=fastpost&inajax=1"

作者: beyes    时间: 2011-4-21 14:45
标题: --trace-ascii 和 --trace 选项
--trace-ascii 选项可以 dump 出所有进出的数据。使用方法如:
[beyes@SLinux phpwind]$ curl --trace-ascii debugdump.txt http://www.baidu.com
之后,会再当前目录下保存有这些调试信息:
== Info: About to connect() to www.baidu.com port 80 (#0)
== Info:   Trying 220.181.111.148... == Info: connected
== Info: Connected to www.baidu.com (220.181.111.148) port 80 (#0)
=> Send header, 164 bytes (0xa4)
0000: GET / HTTP/1.1
0010: User-Agent: curl/7.19.7 (i386-koji-linux-gnu) libcurl/7.19.7 NSS
0050: /3.12.7.0 zlib/1.2.3 libidn/1.18 libssh2/1.2.2
0080: Host: www.baidu.com
0095: Accept: */*
00a2:
<= Recv header, 17 bytes (0x11)
0000: HTTP/1.1 200 OK
<= Recv header, 37 bytes (0x25)
0000: Date: Thu, 21 Apr 2011 06:26:16 GMT
<= Recv header, 17 bytes (0x11)
0000: Server: BWS/1.0
<= Recv header, 22 bytes (0x16)
0000: Content-Length: 6759
<= Recv header, 40 bytes (0x28)
0000: Content-Type: text/html;charset=gb2312
<= Recv header, 24 bytes (0x18)
0000: Cache-Control: private
<= Recv header, 40 bytes (0x28)
0000: Expires: Thu, 21 Apr 2011 06:26:16 GMT
<= Recv header, 123 bytes (0x7b)
0000: Set-Cookie: BAIDUID=5015985CDC4675C8E24D9B17DF344214:FG=1; expir
0040: es=Thu, 21-Apr-41 06:26:16 GMT; path=/; domain=.baidu.com
<= Recv header, 41 bytes (0x29)
0000: P3P: CP=" OTI DSP COR IVA OUR IND COM "
<= Recv header, 24 bytes (0x18)
0000: Connection: Keep-Alive
<= Recv header, 2 bytes (0x2)
0000:
<= Recv data, 3472 bytes (0xd90)
0000: <!doctype html><html><head><meta http-equiv="Content-Type" conte
... ... ...
从上面看到客户端和服务器的请求及回应都标明得很清楚。如果不想保存到文件,而是将这些信息输出到标准输出,可以使用 "-" 符号:
[beyes@SLinux phpwind]$ curl --trace-ascii - http://www.baidu.com

--trace-ascii 和 --trace 两个选项很相似,但 --trace-ascii 来得更直观些,因为它省去了 --trace 中的十六进制表示的数据部分,只是输出了相应的 ascii 。
作者: beyes    时间: 2011-4-21 14:59
标题: --include (-i) 和 --head (-I)
--include
选项使服务器返回所有信息,包括头部和内容。它的缩写是 -i 。

--head
如果只想返回头部,那么就用此选项:
[beyes@SLinux phpwind]$ curl --head http://www.baidu.com
HTTP/1.1 200 OK
Date: Thu, 21 Apr 2011 07:01:14 GMT
Server: BWS/1.0
Content-Length: 6759
Content-Type: text/html;charset=gb2312
Cache-Control: private
Expires: Thu, 21 Apr 2011 07:01:14 GMT
Set-Cookie: BAIDUID=E6BBE58C512A0F796D7E559A14F5825B:FG=1; expires=Thu, 21-Apr-41 07:01:14 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Connection: Keep-Alive

作者: beyes    时间: 2011-4-22 12:00
标题: --data / -d
通过 POST 方法提交表单数据,格式:
curl --data "要提交的数据" "http://www.groad.net/bbs/search.php"


这里“要提交的数据”要数据流格式进行提交,否则会得不到相应的结果。数据流格式尅使用一些抓包工具获得,比如 httpwatch 。


如果表单中数据含有空格,那么使用 %20 来代替。
作者: beyes    时间: 2011-4-22 15:13
标题: --referer 告知访问来路
HTTP Referer 是 header 的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

比如有些网站上的就是利用 referer 来防止图片盗链的,如网易,百度等。也就是说,如果你不是从百度访问百度的图片,那么他就认为你是盗链的。但这样的防止办法,还是那句话,防君子不防小人。下面演示这种情况

现在有一张百度的图片,其地址是:http://hiphotos.baidu.com/gonten ... 268d99fd1a2d3ee.jpg

通过 curl 或 wget 是可以直接下载的。但这里要演示 referer 的作用,比如我像下面这么用 curl :
$ curl -o mnv.jpg --referer http://www.groad.net/ http://hiphotos.baidu.com/gonten ... 268d99fd1a2d3ee.jpg
就等于告诉服务器,我是从 www.groad.net 这里访问你那张图片的,结果下载到本地的就是这个样子:

如果我下面这么用就是原来的图片:
$ curl -o mnv.jpg --referer http://www.baidu.com/ http://hiphotos.baidu.com/gonten ... 268d99fd1a2d3ee.jpg
当然上面不用 --referer 也不用添加 www.baidu.com 这个网址,那也是可以的。这里这么做,只是演示 referer 的原理。
作者: beyes    时间: 2011-10-18 12:27
标题: -F 选项
-F 选项
-F/--form <name=content>
该选项适用于 HTTP 协议。它使 curl 模拟一个填写表单并按下提交按钮的动作。这样 curl 会根据 RFC2388 协议使用 “Content-Type
multipart/form-data
" ,所以改选项支持上传二进制文件。为了强制 content 部分必须是一个文件,我们需要在其前面添加一个 @ 符号来标识。


比如下面这条命令可以将 baby2.gif 这个文件传向服务器,服务器端则是使用 upload.php 来处理:
curl -F "myfile=@baby2.gif" http://192.168.1.106/php/upload/upload.php

一般情况下,服务器端的 upload.php 可能会使用
$_FILES
数组来接收传送过来的文件信息,上面的 curl 命令中的 myfile 为 $_FILES 数组的第一维的名称,这里是要一致且不能写错的,否则上传失败。


下面是 upload.php 所使用的示例代码:
[PHP] 纯文本查看 复制代码
             <?php
                        $upload_dir = "./p_w_upload/";
                        $upload_file = $upload_dir . iconv("UTF-8", "Gb2312", $_FILES["myfile"]["name"]);


                        if (move_uploaded_file($_FILES["myfile"]["tmp_name"], $upload_file)) {
                                echo "<strong>upload ok</strong><hr>";


                                echo "filename:" . $_FILES["myfile"]["name"] . "<br>";
                                echo "tmp filename:" . $_FILES["myfile"]["tmp_name"]."<br>";
                                echo "file size:" . $_FILES["myfile"]["size"] . "<br>";
                                echo "file type:" . $_FILES["myfile"]["type"] . "<br>";
                                echo "<p><a href='javascript:history.back()'>go on your upload</a></p>";
                        } else {
                                echo "upload failed"."<bur>";
                                echo "<a href='javascript:history.back()'>reupload</a>";
                        }
                ?>

作者: beyes    时间: 2012-2-22 17:47
标题: -u 选项
-u 选项的完整格式是:-u/--user <user:password>

该选项用来应付需要从弹出框输入用户名和密码的授权页面,比如你登录家中的路由器时会看到一个弹出框,要求你输入用户名和密码以便登录到路由中进行配置,如下图所示:
[attach]231[/attach]

此时,用 -u 选项可以方便登录进去,命令如下:
curl -u admin:your-password "http://192.168.1.1"
上面 admin 是用户名,密码是 your-password ,用户名和密码由一个冒号隔开。
作者: beyes    时间: 2012-2-22 17:51
标题: -L 选项跟随页面重定向
-L 选项也可以写作 --location ,它用来跟随页面重定向。有时候当你访问一个页面时,会被永久重定向到另一个页面上,这时就可以用 -L 选项进行跟随了。

比如上面的路由器登录,从 http://192.168.1.1 访问时会弹出一个登陆框,但是当你输入用户名和密码后,你会被带到 http://192.168.1.1:8088 这个网址上,为了访问到正确的页面,应如下访问:
curl -u admin:password "http://192.168.1.1" -L "http://192.168.1.1:8080"

作者: beyes    时间: 2012-4-9 00:59
标题: -C 选项断点续传
在下载大文件时,断点续传是一项非常重要的功能。Curl 也提供了支持这一特性的选项:-C

使用方法为:
$ curl URL/download_file -C offset
上面,offset 是一个整数,表示从偏移多少个字节处开始下载。但是 cURL 并不要求我们知道确切的偏移字节,反过来我们可以要求 cURL 自己计算出正确的续传断点,这时可以使用 -C - 选项。可以做如下实验:

下载一个软件,并在开始不久时中断其下载:
# curl -o xunlei.exe http://down.sandai.net/thunder7/Thunder7.2.6.3428.exe
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0 25.2M    0  144k    0     0   105k      0  0:04:06  0:00:01  0:04:05  114k^C/quote]
上面 ^C 表示按下 Ctrl + C 中断下载。

查看已经下载的文件大小:
[quote]# ls -alh
total 264K
drwxr-xr-x 2 root root 4.0K 2012-04-09 00:17 .
drwxr-xr-x 6 root root 4.0K 2012-04-08 22:05 ..
-rw-r--r-- 1 root root  86K 2012-04-08 22:06 history-1.html
-rw-r--r-- 1 root root 168K 2012-04-09 00:17 xunlei.exe

使用 -C - 选项断点续传:
# curl -o xunlei.exe -C - http://down.sandai.net/thunder7/Thunder7.2.6.3428.exe
** Resuming transfer from byte position 172032
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  2 25.1M    2  625k    0     0   232k      0  0:01:50  0:00:02  0:01:48  241k^C
由上可见,从 172032 这个偏移点处开始续传要下载的文件。
作者: beyes    时间: 2012-4-9 11:18
标题: --limit-rate(限制下载速度)/--max-filesize(限制下载最大字节)
--limit-rate 选项用来限制下载速度,比如:
# curl -o xunlei.exe http://down.sandai.net/thunder7/Thunder7.2.6.3428.exe --limit-rate 20k
上面将下载速度限制为 20K 每秒

--max-filesize 选项用来限制下载文件的字节数,比如:
# curl -o xunlei.exe http://down.sandai.net/thunder7/Thunder7.2.6.3428.exe --limit-rate 20k --max-filesize 500
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (63) Maximum file size exceeded
上面尝试下载的文件超出了给出的最大字节数 500,所以最后提示错误。
作者: beyes    时间: 2012-4-9 16:57
标题: -O 选项将下载文件保存为原有文件名
-o 选项可以将下载文件另存为一个文件名,而 -O 选项则可以将下载文件保存为原有的文件名。比如:
$ curl -s -O http://farm5.staticflickr.com/4056/5168441085_778bc29818_t.jpg
下载后的文件名即为:5168441085_778bc29818_t.jpg
作者: beyes    时间: 2012-10-5 16:52
标题: -b 选项 -- 携带 cookie 信息
-b 选项的完整形式是 --cookie ,它表示向服务器发送请求时携带所需要的 cookies 信息,下面是其通常的用法:
curl -A $user_agent -b login_cookies.txt  -d "username=$myname" "http://www.groad.net/login.php

作者: beyes    时间: 2012-10-23 11:39
标题: -c 选项 --- 获取 cookies
许多网站的登录及其它操作都基于 cookies 验证手段,因此将返回的 cookies 保存下来是件必可不少的工作,-c 选项可以满足这点要求:
url -A $user_agent -c login_cookies.txt  -G "http://www.groad.net/login.php
上面的命令将 cookies 信息保存到一个名为 login_cookies.txt 的文本中。
作者: beyes    时间: 2015-2-1 11:17
标题: 访问 https 站点
使用 --insecure 忽略校验步骤,可用于 https 站点,比如:
  1. curl --insecure [url]https://www.example.com[/url]
复制代码

至于对 https 站点的登录,跟普通的 http 应用没什么不同。






欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2