曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 10769|回复: 14
打印 上一主题 下一主题

curl -- 网络瑞士军刀

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2010-4-10 10:31:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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"

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
沙发
 楼主| 发表于 2011-4-22 15:13:10 | 只看该作者

--referer 告知访问来路

HTTP Referer 是 header 的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

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

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

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

如果我下面这么用就是原来的图片:当然上面不用 --referer 也不用添加 www.baidu.com 这个网址,那也是可以的。这里这么做,只是演示 referer 的原理。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
板凳
 楼主| 发表于 2011-4-22 12:00:25 | 只看该作者

--data / -d

通过 POST 方法提交表单数据,格式:
curl --data "要提交的数据" "http://www.groad.net/bbs/search.php"


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


如果表单中数据含有空格,那么使用 %20 来代替。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
地板
 楼主| 发表于 2009-6-6 12:21:10 | 只看该作者

curl

-D 参数
把 header 写到指定文件中。
当你需要存储 HTTP 页面发来的 header 时可用此选项。从 headers 里来的 cookies 在接着的 curl 调用中可以通过使用 -b/--cookie 选项对其读取。
-c/--cookie-jar 选项也是一个存储 cookie 信息的好方法。
在使用 FTP 时,FTP 服务器的相应行被当作 header 。
如果此选项被使用多次,有效的是最后一个。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
5#
 楼主| 发表于 2011-4-21 14:45:39 | 只看该作者

--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 。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
6#
 楼主| 发表于 2011-4-21 14:59:12 | 只看该作者

--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

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
7#
 楼主| 发表于 2011-10-18 12:27:08 | 只看该作者

-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>";
                        }
                ?>

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
8#
 楼主| 发表于 2012-2-22 17:47:44 | 只看该作者

-u 选项

-u 选项的完整格式是:-u/--user <user:password>

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


此时,用 -u 选项可以方便登录进去,命令如下:
curl -u admin:your-password "http://192.168.1.1"
上面 admin 是用户名,密码是 your-password ,用户名和密码由一个冒号隔开。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
9#
 楼主| 发表于 2012-2-22 17:51:45 | 只看该作者

-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"

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
10#
 楼主| 发表于 2012-4-9 00:59:52 | 只看该作者

-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 这个偏移点处开始续传要下载的文件。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 19:48 , Processed in 0.091249 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表