c 抓取网页数据( 执行后cookie信息就被存到了(.txt))

优采云 发布时间: 2022-03-28 01:14

  c 抓取网页数据(

执行后cookie信息就被存到了(.txt))

  # curl -D cookied.txt http://www.linux.com

  执行后cookie信息保存在cookied.txt中

  注意:-c(小写)生成的cookie与-D中的cookie不同。

  5.3:使用cookies

  很多网站都会监控你的cookie信息来判断你是否按照规则访问了他们的网站,所以我们需要使用保存的cookie信息。内置选项:-b

  # curl -b cookiec.txt http://www.linux.com

  6、模仿浏览器

  有些 网站 需要特定的浏览器才能访问它们,而有些则需要特定的版本。curl 内置选项:-A 允许我们指定浏览器访问 网站

  # curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com

  这样服务器端会认为是使用IE8.0访问的

  7、假引用(热链接)

  很多服务器会检查http访问的referer来控制访问。比如先访问首页,再访问首页上的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址。这是一个小偷

  curl 中的内置选项:-e 允许我们设置引用者

  # curl -e "www.linux.com" http://mail.linux.com

  这将使服务器认为您来自单击链接

  8、下载文件

  8.1:使用 curl 下载文件。

  #使用内置选项:-o(小写)

  # curl -o dodo1.jpg http:www.linux.com/dodo1.JPG

  #使用内置选项:-O(大写)

  # curl -O http://www.linux.com/dodo1.JPG

  这将使用服务器上的名称在本地保存文件

  8.2:循环下载

  有时候下载的图片可能和前面部分名字一样,但是最后一个尾部名字不一样

  # curl -O http://www.linux.com/dodo[1-5].JPG

  这将保存所有 dodo1、dodo2、dodo3、dodo4 和 dodo5

  8.3:下载重命名

  # curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG

  因为下载的hello和bb中的文件名是dodo1、dodo2、dodo3、dodo4、dodo5。所以第二次下载会覆盖第一次下载,所以需要重命名文件。

  # curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG

  这样,hello/dodo1.JPG中下载的文件会变成hello_dodo1.JPG等其他文件,从而有效避免文件被覆盖

  8.4:分块下载

  有时候下载的东西会比较大,这个时候我们可以分段下载。使用内置选项:-r

  # curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG

# curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG

# curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG

# cat dodo1_part* > dodo1.JPG

  这样就可以查看dodo1.JPG的内容了

  8.5: 通过 ftp 下载文件

  curl可以通过ftp下载文件,curl提供了两种从ftp下载的语法

  # curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG

# curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG

  8.6: 显示下载进度条

  # curl -# -O http://www.linux.com/dodo1.JPG

  8.7:不会显示下载进度信息

  # curl -s -O http://www.linux.com/dodo1.JPG

  9、断点续传

  在 Windows 中,我们可以使用迅雷等软件从断点处恢复上传。curl也可以通过内置选项达到同样的效果:-C

  如果在下载dodo1.JPG的过程中突然断线,可以使用以下方法恢复上传

  # curl -C -O http://www.linux.com/dodo1.JPG

  10、上传文件

  curl不仅可以下载文件,还可以上传文件。通过内置选项实现:-T

  # curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/

  这会将文件 dodo1.JPG 上传到 ftp 服务器

  11、显示抓取错误

  # curl -f http://www.linux.com/error

  12、通过 -L 选项重定向

  默认情况下,CURL 不发送 HTTP Location 标头(重定向)。当请求的页面移动到另一个站点时,会发送一个 HTTP Loaction 标头作为请求,并将请求重定向到新地址。

  例如:访问时,地址会自动重定向到.hk。

  

   1 curl http://www.google.com

2

3

4

5 302 Moved

6

7

8 302 Moved

9 The document has moved

10 <A HREF=span style="color: rgba(128, 0, 0, 1)""span style="color: rgba(128, 0, 0, 1)"http://www.google.com.hk/url?sa=p&amp;hl=zh-CN&amp;pref=hkredirect&amp;pval=yes&amp;q=http://www.google.com.hk/&amp;ust=1379402837567135amp;usg=AFQjCNF3o7umf3jyJpNDPuF7KTibavE4aAspan style="color: rgba(128, 0, 0, 1)"">here</A>.

11

12

  

  上面的输出显示请求的存档已移至。可以使用 -L 选项强制重定向

  1 # 让curl使用地址重定向,此时会查询google.com.hk站点

2 curl -L http://www.google.com

  补充恢复:通过使用-C选项,可以对大文件使用恢复功能,如:

  

  1 # 当文件在下载完成之前结束该进程

2 $ curl -O http://www.gnu.org/software/gettext/manual/gettext.html

3 ############## 20.1%

4

5 # 通过添加-C选项继续对该文件进行下载,已经下载过的文件不会被重新下载

6 curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html

7 ############### 21.1%

  

  使用 CURL 进行网络限速

  通过 --limit-rate 选项限制 CURL 的最大网络使用量

  1 # 下载速度最大不会超过1000B/second

2

3 curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

  下载指定时间内修改过的文件

  下载文件时,可以判断文件的最后修改日期。如果文件在指定日期内被修改过,则下载,否则不下载。

  此功能可以通过使用 -z 选项来实现:

  1 # 若yy.html文件在2011/12/21之后有过更新才会进行下载

2 curl -z 21-Dec-11 http://www.example.com/yy.html

  卷曲授权

  访问需要授权的页面时,可以通过 -u 选项提供用户名和密码进行授权

  1 curl -u username:password URL

2

3 # 通常的做法是在命令行只输入用户名,之后会提示输入密码,这样可以保证在查看历史记录时不会将密码泄露

4 curl -u username URL

  从 FTP 服务器下载文件

  CURL 还支持 FTP 下载。如果在 url 中指定了文件路径,而不是指定要下载的特定文件名,则 CURL 将列出目录中的所有文件名,而不是下载目录中的所有文件。

  1 # 列出public_html下的所有文件夹和文件

2 curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/

3

4 # 下载xss.php文件

5 curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

  上传文件到 FTP 服务器

  使用 -T 选项将指定的本地文件上传到 FTP 服务器

  

  # 将myfile.txt文件上传到服务器

curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com

# 同时上传多个文件

curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com

# 从标准输入获取内容保存到服务器指定的文件中

curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

  

  获取更多信息

  使用 -v 和 -trace 获取更多链接信息

  在字典中查找单词

  

  1 # 查询bash单词的含义

2 curl dict://dict.org/d:bash

3

4 # 列出所有可用词典

5 curl dict://dict.org/show:db

6

7 # 在foldoc词典中查询bash单词的含义

8 curl dict://dict.org/d:bash:foldoc

  

  为 CURL 设置代理

  -x 选项可以向 CURL 添加代理功能

  1 # 指定代理主机和端口

2 curl -x proxysever.test.com:3128 http://google.co.in

  其他网站组织

  网站cookie 信息的存储和使用

  1 # 将网站的cookies信息保存到sugarcookies文件中

2 curl -D sugarcookies http://localhost/sugarcrm/index.php

3

4 # 使用上次保存的cookie信息

5 curl -b sugarcookies http://localhost/sugarcrm/index.php

  传递请求数据

  curl 默认使用 GET 方法请求数据,这种方式直接通过 URL 传递数据

  可以使用 --data/-d 方法指定使用 POST 传递数据

  

  1 # GET

2 curl -u username https://api.github.com/user?access_token=XXXXXXXXXX

3

4 # POST

5 curl -u username --data "param1=value1&param2=value" https://api.github.com

6

7 # 也可以指定一个文件,将该文件中的内容当作数据传递给服务器端

8 curl --data @filename https://github.api.com/authorizations

  

  注意:默认情况下,如果过去通过 POST 传递的数据中存在特殊字符,则需要先将特殊字符转义到服务器。如果该值收录空格,则需要先将空格转换为 %20。如:

  1 curl -d "value%201" http://hostname.com

  在 CURL 的新版本中,提供了一个新选项 --data-urlencode,通过该选项提供的参数将自动转义特殊字符。

  1 curl --data-urlencode "value 1" http://hostname.com

  除了使用 GET 和 POST 协议之外,还可以使用 -X 选项指定其他协议,例如:

  1 curl -I -X DELETE https://api.github.cim

  上传文件

  1 curl --form "fileupload=@filename.txt" http://hostname/resource

  获取请求头信息

  curl --head http://www.example.com

  返回数据:

  HTTP/1.1 200 OK

Content-Encoding: gzip

Accept-Ranges: bytes

Cache-Control: max-age=604800

Content-Type: text/html; charset=UTF-8

Date: Tue, 23 Oct 2018 11:29:23 GMT

Etag: "1541025663+gzip"

Expires: Tue, 30 Oct 2018 11:29:23 GMT

Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT

Server: ECS (dca/532C)

X-Cache: HIT

Content-Length: 606

  其他参数(翻译为转载here):

  

  -a/--append 上传文件时,附加到目标文件

--anyauth 可以使用“任何”身份验证方法

--basic 使用HTTP基本验证

-B/--use-ascii 使用ASCII文本传输

-d/--data HTTP POST方式传送数据

--data-ascii 以ascii的方式post数据

--data-binary 以二进制的方式post数据

--negotiate 使用HTTP身份验证

--digest 使用数字身份验证

--disable-eprt 禁止使用EPRT或LPRT

--disable-epsv 禁止使用EPSV

--egd-file 为随机数据(SSL)设置EGD socket路径

--tcp-nodelay 使用TCP_NODELAY选项

-E/--cert 客户端证书文件和密码 (SSL)

--cert-type 证书文件类型 (DER/PEM/ENG) (SSL)

--key 私钥文件名 (SSL)

--key-type 私钥文件类型 (DER/PEM/ENG) (SSL)

--pass 私钥密码 (SSL)

--engine 加密引擎使用 (SSL). "--engine list" for list

--cacert CA证书 (SSL)

--capath CA目 (made using c_rehash) to verify peer against (SSL)

--ciphers SSL密码

--compressed 要求返回是压缩的形势 (using deflate or gzip)

--connect-timeout 设置最大请求时间

--create-dirs 建立本地目录的目录层次结构

--crlf 上传是把LF转变成CRLF

--ftp-create-dirs 如果远程目录不存在,创建远程目录

--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用

--ftp-pasv 使用 PASV/EPSV 代替端口

--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址

--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输

--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输

-F/--form 模拟http表单提交数据

-form-string 模拟http表单提交数据

-g/--globoff 禁用网址序列和范围使用{}和[]

-G/--get 以get的方式来发送数据

-h/--help 帮助

-H/--header 自定义头信息传递给服务器

--ignore-content-length 忽略的HTTP头信息的长度

-i/--include 输出时包括protocol头信息

-I/--head 只显示文档信息

-j/--junk-session-cookies 读取文件时忽略session cookie

--interface 使用指定网络接口/地址

--krb4 使用指定安全级别的krb4

-k/--insecure 允许不使用证书到SSL站点

-K/--config 指定的配置文件读取

-l/--list-only 列出ftp目录下的文件名称

--limit-rate 设置传输速度

--local-port 强制使用本地端口号

-m/--max-time 设置最大传输时间

--max-redirs 设置最大读取的目录数

--max-filesize 设置最大下载的文件总量

-M/--manual 显示全手动

-n/--netrc 从netrc文件中读取用户名和密码

--netrc-optional 使用 .netrc 或者 URL来覆盖-n

--ntlm 使用 HTTP NTLM 身份验证

-N/--no-buffer 禁用缓冲输出

-p/--proxytunnel 使用HTTP代理

--proxy-anyauth 选择任一代理身份验证方法

--proxy-basic 在代理上使用基本身份验证

--proxy-digest 在代理上使用数字身份验证

--proxy-ntlm 在代理上使用ntlm身份验证

-P/--ftp-port 使用端口地址,而不是使用PASV

-Q/--quote 文件传输前,发送命令到服务器

--range-file 读取(SSL)的随机文件

-R/--remote-time 在本地生成文件时,保留远程文件时间

--retry 传输出现问题时,重试的次数

--retry-delay 传输出现问题时,设置重试间隔时间

--retry-max-time 传输出现问题时,设置最大重试时间

-S/--show-error 显示错误

--socks4 用socks4代理给定主机和端口

--socks5 用socks5代理给定主机和端口

-t/--telnet-option Telnet选项设置

--trace 对指定文件进行debug

--trace-ascii Like --跟踪但没有hex输出

--trace-time 跟踪/详细输出时,添加时间戳

--url Spet URL to work with

-U/--proxy-user 设置代理用户名和密码

-V/--version 显示版本信息

-X/--request 指定什么命令

-y/--speed-time 放弃限速所要的时间。默认为30

-Y/--speed-limit 停止传输速度的限制,速度时间'秒

-z/--time-cond 传送时间设置

-0/--http1.0 使用HTTP 1.0

-1/--tlsv1 使用TLSv1(SSL)

-2/--sslv2 使用SSLv2的(SSL)

-3/--sslv3 使用的SSLv3(SSL)

--3p-quote like -Q for the source URL for 3rd party transfer

--3p-url 使用url,进行第三方传送

--3p-user 使用用户名和密码,进行第三方传送

-4/--ipv4 使用IP4

-6/--ipv6 使用IP6

  

  官方文档:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线