网络请求工具 cURL

2017-08-16

cRUL 是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在
“标准输出”(stdout)上面。

查看网页源码

1
$ curl baidu.com
1
2
3
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

如果要把这个网页保存下来,可以使用 -o 或 --output 参数,这就相当于使用 wget
命令了。

1
$ curl -o file_name baidu.com

自动跳转

有的网址是自动跳转的。使用-L--location参数,curl就会跳转到新的网址。

1
$ curl -L baidu.com

显示头信息

-i 或 --include 参数可以显示 http response 的头信息,连同网页代码一起。
-I 或 --head 参数则是只显示 http response 的头信息。

1
$ curl -i baidu.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HTTP/1.1 200 OK
Date: Wed, 16 Aug 2017 08:21:49 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Thu, 17 Aug 2017 08:21:49 GMT
Connection: Keep-Alive
Content-Type: text/html
 
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

显示通信过程

-v 或 --verbose 参数可以显示一次 http 通信的整个过程,包括端口连接和
http request 头信息。

1
$ curl -v baidu.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
* Rebuilt URL to: baidu.com/
* Trying 220.181.57.217...
* Connected to baidu.com (220.181.57.217) port 80 (#0)
> GET / HTTP/1.1
> Host: baidu.com
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Wed, 16 Aug 2017 08:24:49 GMT
< Server: Apache
< Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
< ETag: "51-47cf7e6ee8400"
< Accept-Ranges: bytes
< Content-Length: 81
< Cache-Control: max-age=86400
< Expires: Thu, 17 Aug 2017 08:24:49 GMT
< Connection: Keep-Alive
< Content-Type: text/html
<
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>
* Connection #0 to host baidu.com left intact

也可以通过 --trace 或 --trace-ascii 命令查看更详细通信过程,执行后通过制定
的日志地址查看

1
2
$ curl --trace ${log_path} baidu.com
$ curl --trace-ascii ${log_path} baidu.com

HTTP动词

curl默认的HTTP动词是GET,使用-X参数可以支持其他动词。

1
$ curl -X POST baidu.com

增加头信息

1
2
# 使用-H 或 --header 可以起到这个作用
$ curl localhost:8002/test -H "Content-Type:application/json"

发送表单信息

1
2
3
4
5
6
7
8
9
# GET方法比较简单,网址后直接跟参数
$ curl localhost:8002/test?data=xxx
# POST方法通过--data或-d参数实现
$ curl -X POST localhost:8002/test --data "name=xxx" --data "password=xxx"
$ curl -X POST localhost:8002/test -H "Content-Type:application/x-www-form-urlencoded" -d "name=win"
# 使用application/json 提交json数据
$ curl -X POST localhost:8002/test -H "Content-Type:application/json" -d '{"name":"wxnacy"}'
#如果你的数据没有经过表单编码,还可以让curl为你编码,参数是`--data-urlencode`。
$ curl -X POST localhost:8002/test --data-urlencode "data=1 2"

文件上传

1
2
$ curl --form upload_field=@localfilename localhost:8002/test
$ curl --form "upload_field=@new.txt;type=text/plain" localhost:8002/test

Referer字段

需要添加request头信息referer标示从哪里跳转来的

1
$ curl localhost:8002/test --referer ${from_url}

user-agent字段

使用 --user-agent 或 -A 可以模拟发送 user-agent 字段

1
$ curl localhost:8002/test --user-agent "device"

cookie

1
2
3
4
5
6
# 发送的cookie可以在response headers中看到
$ curl localhost:8002/test --cookie "name=ss"
# -c 可以保存服务器返回的cookies到文件中
$ curl localhost:8002/test -c ${cookie_file}
# -b 可以使用这个文件作为cookie信息,进行后续的请求。
$ curl localhost:8002/test -b ${cookie_file}

HTTP认证

有些网域需要HTTP认证,这时 cURL 需要用到--user或 -u参数。

1
2
# 这时候服务器会在头信息中接收到Authorization字段,值为Basic + name:pass的base64加密数值
$ curl localhost:8002/test --user name:apss

参考资料

网络请求工具 cURL的更多相关文章

  1. 基于Android Volley的网络请求工具

    基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...

  2. swift项目第十天:网络请求工具类的封装

    import UIKit /* 必须先导入头文件:import AFNetworking */ import AFNetworking //MARK:-0:定义枚举:以枚举定义请求网络的get和pos ...

  3. 网络请求工具--AFNetworking 分类: ios技术 2015-02-03 08:17 76人阅读 评论(0) 收藏

    在我们开发过程中,网络请求是必不可少的,对于网络框架,现在主流的大概只有三类:ASI框架: HTTP终结者(已经停止更新了),MKNetworkKit ,AFN.今天我就来浅谈一下这个AFN AFNe ...

  4. 基于AFNetworking封装的网络请求工具类【原创】

    今天给大家共享一个我自己封装的网络请求类,希望能帮助到大家. 前提,导入AFNetworking框架, 关于修改AFN源码:通常序列化时做对text/plan等的支持时,可以一劳永逸的修改源代码,在a ...

  5. Java之网络请求工具类(依赖:org.apache.http;注:HttpClient 4.4,HttpCore 4.4)

    到此处可以去下载依赖包:http://hc.apache.org/downloads.cgi import java.util.List; import org.apache.http.HttpSta ...

  6. 网络请求工具类WebServiceUtils

    如果对WebService一无所知的话,建议先看看这两篇博客,对你WebService很有帮助. http://blog.csdn.NET/eyu8874521/article/details/912 ...

  7. WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...

  8. Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的

    在前两篇博文中已经做了铺垫,下面咱们就可以用前面介绍过的内容开始做一个小项目了(项目中会用到Afinal框架,不会用Afinal的童鞋可以先看一下上一篇博文),正所谓麻雀虽小,五脏俱全,这在里我会尽量 ...

  9. 网络请求 get post

    1.新建一个网络请求工具类,负责整个项目中所有的Http网络请求 提示:同步请求会卡住线程,发送网络请求应该使用异步请求(这意味着类方法不能有返回值) 2.工具类的实现 YYHttpTool.h文件 ...

随机推荐

  1. 前端学习之JavaScript中的 NaN 与 isNaN

    NaN NaN 即 Not a Number ,不是一个数字. 在 JavaScript 中,整数和浮点数都统称为 Number 类型 .除此之外,Number 类型还有一个很特殊的值,即 NaN . ...

  2. 20145312 实验五《Java网络编程》

    20145312 实验五<Java网络编程> 一. 实验内容及要求 实验内容: 运行下载的TCP代码,结对进行,一人服务器,一人客户端: 利用加解密代码包,编译运行代码,一人加密,一人解密 ...

  3. Linux系统调用怎么和内核或底层驱动交互的

    学习Linux系统下驱动程序开发已有大半年时间,心中一直有个疑惑:那就是诸如open.write.read等系统调用是怎么和内核或底层驱动建立起联系的呢?今天将自己的一些粗略的理解总结如下.      ...

  4. Ansible VMware模块使用示例

    vmware_vm_facts模块使用示例 执行条件: 安装Pyvmimo:  pip install pyvmomi 方法一,直接编写单个yaml文件: - hosts: localhost # 注 ...

  5. 09_MySQL DQL_SQL99标准中的多表查询(外连接)

    # 二.外连接/* 场景:查询值在1个表中出现,在另外1个表中没有出现 特点: 0.也是两张表的字段拼接,分为主表和从表 1.外连接的结果,将显示主表中的所有记录行 如果连接字段在从表中有记录,则显示 ...

  6. R中的sub替换函数【转】

    R中的grep.grepl.sub.gsub.regexpr.gregexpr等函数都使用正则表达式的规则进行匹配.默认是egrep的规则,也可以选用Perl语言的规则.在这里,我们以R中的sub函数 ...

  7. 机器学习笔记—混合高斯和 EM 算法

    本文介绍密度估计的 EM(Expectation-Maximization,期望最大). 假设有 {x(1),...,x(m)},因为是无监督学习算法,所以没有 y(i). 我们通过指定联合分布 p( ...

  8. 修改input的placeholder颜色

    1.CSS选择器 因为每个浏览器的CSS选择器有所差异,所以需要针对每个浏览器做单独的设定. ::-webkit-input-placeholder { /* WebKit browsers */ c ...

  9. offset的坑 使用前要将对象先show

    使用jquery $('#obj').offset( {top:300, left: 600}); 如果设置offset之前是隐藏的,那么你设置新的offset之后就不会是指定的位置,而且会越飞越远, ...

  10. java实现赋值excel模板,并在新文件中写入数据,并且下载

    /** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new ...