网络请求工具 cURL
网络请求工具 cURL
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的更多相关文章
- 基于Android Volley的网络请求工具
基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...
- swift项目第十天:网络请求工具类的封装
import UIKit /* 必须先导入头文件:import AFNetworking */ import AFNetworking //MARK:-0:定义枚举:以枚举定义请求网络的get和pos ...
- 网络请求工具--AFNetworking 分类: ios技术 2015-02-03 08:17 76人阅读 评论(0) 收藏
在我们开发过程中,网络请求是必不可少的,对于网络框架,现在主流的大概只有三类:ASI框架: HTTP终结者(已经停止更新了),MKNetworkKit ,AFN.今天我就来浅谈一下这个AFN AFNe ...
- 基于AFNetworking封装的网络请求工具类【原创】
今天给大家共享一个我自己封装的网络请求类,希望能帮助到大家. 前提,导入AFNetworking框架, 关于修改AFN源码:通常序列化时做对text/plan等的支持时,可以一劳永逸的修改源代码,在a ...
- 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 ...
- 网络请求工具类WebServiceUtils
如果对WebService一无所知的话,建议先看看这两篇博客,对你WebService很有帮助. http://blog.csdn.NET/eyu8874521/article/details/912 ...
- WebUtils-网络请求工具类
网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...
- Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的
在前两篇博文中已经做了铺垫,下面咱们就可以用前面介绍过的内容开始做一个小项目了(项目中会用到Afinal框架,不会用Afinal的童鞋可以先看一下上一篇博文),正所谓麻雀虽小,五脏俱全,这在里我会尽量 ...
- 网络请求 get post
1.新建一个网络请求工具类,负责整个项目中所有的Http网络请求 提示:同步请求会卡住线程,发送网络请求应该使用异步请求(这意味着类方法不能有返回值) 2.工具类的实现 YYHttpTool.h文件 ...
随机推荐
- c++ 跳转语句块
p170~p172:跳转语句:1.break:对while for switcho有效!2.continue:中断当前迭代,但是循环还要继续.因此对while for有效,对switch无效!3.go ...
- opkg 不能更新和安装openwrt软件的方法
首先,将所有的IPK 放在自己的虚拟HTTP服务器上.2,用Telnet进入路由器,使用VI编辑器,编程Opkg.conf,命令: vi /etc/opkg.conf3,修改文件,将第一行 ...
- MySQL多版本并发控制机制(MVCC)-源码浅析
MySQL多版本并发控制机制(MVCC)-源码浅析 前言 作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾.<<事务处理-概念与技术>>诚然 ...
- 20145321 《Java程序设计》第10周学习总结
20145321 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程:网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. IP地址:为了能够方便的识别网络上 ...
- 20145324 Java实验二
实验1: 先建立.java 在建立test 测试正常情况 测试出错情况 错误 修改后的代码 正确 测试边界情况 100时出错 修改后的代码 测试 实验2: 先建test在写,java 实验3:建模 练 ...
- 20145333 《Java程序设计》第二次实验报告
2014333 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测试 ...
- 机器学习:让我们彻底搞懂CNN【转】
本文转载自:http://115.com/182920/T1266078.html 机器学习:让我们彻底搞懂CNN 上世纪科学家们发现了几个视觉神经特点,视神经具有局部感受眼,一整张图的识别由多个局部 ...
- 一键安装 zabbix 2.0 版本 脚本
原文地址: http://blog.csdn.net/u012449196/article/details/53859068 本文修改了原文中的部分错误,此脚本适用于zabbix 2.0 版本,以版本 ...
- 通俗易懂讲解IO模型
前言 说到IO模型,都会牵扯到同步.异步.阻塞.非阻塞这几个词.从词的表面上看,很多人都觉得很容易理解.但是细细一想,却总会发现有点摸不着头脑.自己也曾被这几个词弄的迷迷糊糊的,每次看相关资料弄明白了 ...
- 如何制作自己的R包?
摘自 方匡南 等编著<R数据分析-方法与案例详解>.电子工业出版社 R包简介 R包提供了一个加载所需代码.数据和文件的集合.R软件自身就包含大约30种不同功能的包,这些基本包提供了R软件的 ...