- 适用范围
- 计算机
- 类 别
- 用URL语法
- 作 用
- 文件传输
- 中文名
- curl
- 外文名
- curl(CommandLine Uniform Resource Locator)
-
curl 模拟 GET\POST 请求,以及 curl post 上传文件
2018-06-15 11:41:45curl 模拟 GET\POST 请求,以及 curl post 上传文件 一般情况下,我们调试数据接口,都会使用一个 postman 的工具,但是这个工具还是有点大了。事实上,我们在调试一些小功能的时候,完全没有必要使用它。在命令行...curl 模拟 GET\POST 请求,以及 curl post 上传文件
一般情况下,我们调试数据接口,都会使用一个
postman
的工具,但是这个工具还是有点大了。事实上,我们在调试一些小功能的时候,完全没有必要使用它。在命令行中,我们使用curl
这个工具,完全可以满足我们轻量的调试要求。下面,我们来简单的说一下,
curl
的一些常见使用方法:curl GET 请求
curl
命令 + 请求接口的地址。curl localhost:9999/api/daizhige/article
如上,我们就可以请求到我们的数据了,如果想看到详细的请求信息,我们可以加上
-v
参数curl localhost:9999/api/daizhige/article -v
操作结果如下图所示:
curl POST 请求
我们可以用
-X POST
来申明我们的请求方法,用-d
参数,来传送我们的参数。所以,我们可以用
-X PUT
和-X DELETE
来指定另外的请求方法。curl localhost:9999/api/daizhige/article -X POST -d "title=comewords&content=articleContent"
如上,这就是一个普通的
post
请求。但是,一般我们的接口都是
json
格式的,这也没有问题。我们可以用-H
参数来申明请求的header
curl localhost:9999/api/daizhige/article -X POST -H "Content-Type:application/json" -d '{"title":"comewords","content":"articleContent"}'
so, 我们可以用
-H
来设置更多的header
比如,用户的token
之类的。同样,我们可以用
-v
来查看详情。curl POST 上传文件
上面的两种请求,都是只传输字符串,我们在测试上传接口的时候,会要求传输文件,其实这个对于
curl
来说,也是小菜一碟。我们用
-F "file=@__FILE_PATH__"
的请示,传输文件即可。命令如下:curl localhost:8000/api/v1/upimg -F "file=@/Users/fungleo/Downloads/401.png" -H "token: 222" -v
执行结果如下图所示:
更多
curl
的使用方法,以及参数说明,可以在系统中输入man curl
来进行查看。或者,点击 curl man 查看网页版的介绍。所以,我们可以用
man 命令名称
来查看更多的工具的介绍。当然,一些非主流的命令行工具,应该是没有相关的介绍的。可能你会感觉用这些命令才进行操作,感觉破烦。但是,当你仅仅需要请求一个接口,进行一个轻量的操作的时候,是顺手在终端中输入一个命令来得方便,还是打开一个重型的图形工具来得方便呢?
命令行是可以保存历史记录的,我们使用
ctrl+r
快捷键可以进行历史命令搜索,这样,我们可以非常方便的重复进行命令调试。我现在已经养成了在终端中写代码,跑代码,以及调试代码的习惯,我感觉这样非常方便。
当然,我的想法不一定是正确的,但是依然希望,能够对看官有所帮助。
本文由 FungLeo 原创,允许转载,但转载必须保留首发链接。
2020年04月27日补充
我没想到这篇博文有这么大的阅读量。文中所表述的 curl 的使用虽然关键点都已经涉及到了,但是如何更加优雅的使用,并没有涉及。如果你对这部分内容感兴趣,可以阅读我的这篇博文 《linux 或 mac 命令行更优雅的使用 curl 命令,以及命令行常用的快捷键说明》,相信各位看官在看过这篇文章之后,对于
curl
命令的使用,会更加的舒服、优雅哦! -
curl
2016-09-06 14:30:59//var_dump($_SERVER);exit; $cookie_file = tempnam('./temp','cookie'); //创建cookie文件保存的位置 //echo $cookie_file;... function curl($url,$data=array(),$method,$setcooke=false,$cookie_file=f<?php //var_dump($_SERVER);exit; $cookie_file = tempnam('./temp','cookie'); //创建cookie文件保存的位置 //echo $cookie_file;exit; function curl($url,$data=array(),$method,$setcooke=false,$cookie_file=false){ $ch = curl_init(); //1.初始化 curl_setopt($ch, CURLOPT_URL, $url); //2.请求地址 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);//3.请求方式 //4.参数如下 禁止服务器端的验证 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //伪装请求来源,绕过防盗 //curl_setopt($ch,CURLOPT_REFERER,"http://wthrcdn.etouch.cn/"); //配置curl解压缩方式(默认的压缩方式) curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding:gzip')); curl_setopt($ch, CURLOPT_ENCODING, "gzip"); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0'); //指明以哪种方式进行访问 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); if($method=="POST"){//5.post方式的时候添加数据 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } if($setcooke==true){ //如果设置要请求的cookie,那么把cookie值保存在指定的文件中 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); }else{ //就从文件中读取cookie的信息 curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $tmpInfo = curl_exec($ch); if (curl_errno($ch)) { return curl_error($ch); } curl_close($ch); return $tmpInfo; } //模拟登陆 //登陆保存用户信息到cookie中 $url="http://www.ecshop.com/user.php"; $data=array('username'=>'ecshop','password'=>'ecshop','remember'=>'1','act'=>'act_login','back_act'=>'./index.php','submit'=>''); //post提交也可以不用get视情况而定,json转成数组json_decode($str,true);加true可以防乱码 curl($url,$data,'POST',true,$cookie_file); //get获取 $url="http://www.ecshop.com/user.php?act=order_list"; $str=curl($url,array(),'GET',false,$cookie_file); echo $str;
-
php远程请求CURL案例(爬虫、保存登录状态)
2020-08-15 15:24:55* curl_get * @param $url * @param null $param * @param null $options * @return array */ function curl_get($url,$param = null,$options = null){ if(empty($options)){ $options = array( 'timeout'...GET案例
/** * curl_get * @param $url * @param null $param * @param null $options * @return array */ function curl_get($url,$param = null,$options = null){ if(empty($options)){ $options = array( 'timeout' => 30,// 请求超时 'header' => array(), 'cookie' => '',// cookie字符串,浏览器直接复制即可 'cookie_file' => '',// 文件路径,并要有读写权限的 'ssl' => 0,// 是否检查https协议 'referer' => null ); }else{ empty($options['timeout']) && $options['timeout'] = 30; empty($options['ssl']) && $options['ssl'] = 0; } $result = array( 'code' => 0, 'msg' => 'success', 'body' => '' ); if(is_array($param)){ $param = http_build_query($param); } $url = strstr($url,'?')?trim($url,'&').'&'.$param:$url.'?'.$param; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $url);// 设置url !empty($options['header']) && curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); // 设置请求头 if(!empty($options['cookie_file']) && file_exists($options['cookie_file'])){ curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']); curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']); }else if(!empty($options['cookie'])){ curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']); } curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); //curl解压gzip页面内容 curl_setopt($ch, CURLOPT_HEADER, 0);// 不获取请求头 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面 !$options['ssl'] && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); // 禁止服务器端的验证ssl !empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']);//伪装请求来源,绕过防盗 curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']); //执行并获取内容 $output = curl_exec($ch); //对获取到的内容进行操作 if($output === FALSE ){ $result['code'] = 1; // 错误 $result['msg'] = "CURL Error:".curl_error($ch); } $result['body'] = $output; //释放curl句柄 curl_close($ch); return $result; }
POST案例
/** * curl_post * @param $url 请求地址 * @param null $param get参数 * @param array $options 配置参数 * @return array */ function curl_post($url,$param = null,$options = array()){ if(empty($options)){ $options = array( 'timeout' => 30, 'header' => array(), 'cookie' => '', 'cookie_file' => '', 'ssl' => 0, 'referer' => null ); }else{ empty($options['timeout']) && $options['timeout'] = 30; empty($options['ssl']) && $options['ssl'] = 0; } $result = array( 'code' => 0, 'msg' => 'success', 'body' => '' ); if(is_array($param)){ $param = http_build_query($param); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url);// 设置url !empty($options['header']) && curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); // 设置请求头 if(!empty($options['cookie_file']) && file_exists($options['cookie_file'])){ curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']); curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']); }else if(!empty($options['cookie'])){ curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']); } curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); //curl解压gzip页面内容 curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $param); curl_setopt($ch, CURLOPT_HEADER, 0);// 不获取请求头 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面 !$options['ssl'] && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); // 禁止服务器端的验证ssl !empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']);//伪装请求来源,绕过防盗 curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']); //执行并获取内容 $output = curl_exec($ch); //对获取到的内容进行操作 if($output === FALSE ){ $result['code'] = 1; // 错误 $result['msg'] = "CURL Error:".curl_error($ch); } $result['body'] = $output; //释放curl句柄 curl_close($ch); return $result; }
其他请求类型请自己参考封装处理
-
git报错--RPC failed,curl 18 transfer closed with outstanding read data remaining
2017-08-10 11:06:49遇到的问题一: error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack fail...遇到的问题一:
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed这个错误是因为项目太久,tag资源文件太大
解决方式一, 网上大部分解决措施:命令终端输入
git config --global http.postBuffer 524288000
用上面的命令有的人可以解决,我的还不行,需要如下方式命令,只clone深度为一
$ git clone /github_com/large-repository --depth 1
$ cd large-repository
$ git fetch --unshallow中划线处填入你的git仓库的地址。。。(我用的是http方式,不是ssh)
解决方式二,一般clone http方式的容易产生此问题,改成SSH的方式也有效,即https://改为git://
遇到的问题二:
warning: templates not found /usr/local/git/share/git-core/templates
在终端输入
open /usr/local/
在打开的目录中可以看到:
如果没有 git 目录
打开下面的地址,下载 git-osx 并安装,
http://git-scm.com/download/mac
如果有 git 目录
并且相应的 share,git-core,templates 目录都有,,说明是权限的问题.
在终端输入:
sudo chmod -R 755 /usr/local/git/share/git-core/templates
注意 sudo 创建目录需要输入当前 Mac 用户的密码
最后重新 clone 项目以上问题是我在Mac电脑用xcode自带git、sourcetree、终端三个方式clone某个项目都不能成功克隆下来。
遇到的问题,其他项目都可以。
相关拓展博客地址:
http://www.jianshu.com/p/0e3421961db4
http://blog.csdn.net/h5q8n2e7/article/details/46919579
-
cURL实战教程
2017-08-24 17:36:05由King老师精心打造cURL实战课程,由浅入深的讲解了cURL中常见的API,及cURL在实际开发中的应用,实现了模拟登陆、文件上传下载、多线程cURL等。通过cURL可以操作各种网络资源! 山哥出品,必属精品! -
curl安装
2018-06-28 10:57:411、curl官网https://curl.haxx.se/2、curl简介curl是用于通过URL传输数据的命令行工具和库支持...DICT,FILE,FTP,FTPS,Gopher,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,POP3,POP3S,RTMP...curl支持SSL证书,H... -
curl命令获取本机外网IP
2018-10-10 20:15:45curl获取本机外网IP的几个命令: curl ifconfig.me curl icanhazip.com curl curlmyip.com curl ip.appspot.com curl ipinfo.io/ip curl ipecho.net/plain curl www.trackip.net/i #补充 curl ip.sb ... -
curl malformed
2019-08-31 11:46:48PHP Curl调用接口时,如果 url 地址是 NULL 类型,那么调用curl_error() 方法将会 返回malformed -
curl命令模拟json格式的post请求
2017-09-06 08:48:57curl命令 模拟json格式的post请求测试接口 curl -H "Content-Type:application/json" -X POST --data ' -
Ubuntu 安装curl
2017-12-22 20:02:15程序“curl”尚未安装。 您可以使用以下命令安装: sudo apt install curl 已经提示很明确了,sudo apt install curl 先更新一下sudo apt-get update sudo apt install curl -
curl命令
2015-06-18 15:26:03curl是一种命令行工具,支持多种协议,作用是发出网络请求,然后得到和提取数据,显示在stdout上面。 在服务器端,使用curl查看请求地址是否返回数据来判断是nginx配置问题还是程序服务配置问题不失为一种好方式... -
PHP中使用CURL之php curl详细解析和常见大坑
2018-09-03 11:38:57这篇文章主要介绍了PHP中使用CURL之php curl详细解析和常见大坑 ,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 七夕啦,作为开发,妹子没得撩就“撩”下服务器吧,妹子有得撩的同学那就左拥妹子... -
curl命令详解 (curl -I)
2019-07-30 11:30:47curl 是一种命令行工具,作用是发出网络请求,然后获取数据,显示在"标准输出"(stdout)上面。它支持多种协议,下面列举其常用功能。 一、查看网页源码 直接在 curl 命令后加上网址,就可以看到网页源码。以网址... -
Linux中curl命令详解
2019-03-11 15:26:35curl(CommandLine Uniform Resource Locator),即在命令行中利用URL进行数据或者文件传输。 https://curl.haxx.se/ 这是curl的官网。可以从上面的官网地址下载最新的curl版本。同时可以在官网看出curl支持的各种协议... -
java 怎么调用curl,java 怎么调用curl
2017-05-05 01:08:22java中怎么使用curl,java中怎么使用curl,java中怎么使用curl, -
curl: symbol lookup error: curl: undefined symbol: curl_mime_free 解决方法
2019-12-26 01:11:59其实就是更新一下版本就可以了。 下载curl包(可以在这个网站上找最新的版本 http://curl.haxx.se/download/) ...tar -xzvf curl-7.55.1.tar.gz cd curl-7.55.1 ./configure make mak... -
Tool之curl:curl的简介、安装、使用方法之详细攻略
2020-04-19 13:09:21Tool之curl:curl的简介、安装、使用方法之详细攻略 curl的简介 curl是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL... -
Curl 显示下载速度等详情
2020-04-01 11:23:56curl -Lo /dev/null -skw "%{speed_download}\n" http:xxxxxx.gz ...# curl -Lo /dev/null -skw "time_connect: %{time_connect} s\ntime_namelookup: %{time_namelookup} s\ntime_pretransfer: %{time_pretransfe... -
Linux curl 命令模拟 POST/GET 请求
2018-08-28 23:38:14curl 命令,是一个利用URL规则在命令行下工作的文件传输工具。 curl 支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。 作为一款强力工具,curl支持包括HTTP、HTTPS、FTP等众多协议,... -
curl乱码
2018-02-08 14:21:03curl url返回的内容乱码 使用iconv命令可以解决乱码问题 curl url|iconv -f gb2312 -t utf8iconv -f(rom)指定来源编码,-t(o)转化的编码 -f fromcodeset Identify the codeset of the input file. The ... -
[命令行] curl查询公网出口IP
2016-07-22 14:27:02不管是在家里还是办公室,或者是公司的主机,很多时候都是在内网中,也就是说很多都是通过 NAT上网的,有时候需要查询下出口的公网IP,如果有浏览器,可以...liuzhizhi@lzz-rmbp|logs # curl ipinfo.io { "ip": "114. -
curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused的几种解决方式
2020-06-19 20:39:49curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused的几种解决方式? 前言: 最近随着flutter的发布,多数公司都开始...curl: (7) Failed to connect to raw.githubuserconten
-
转行做IT-第6章 IDEA、方法
-
Java星选一卡通
-
小论文数据求解.zip
-
页码的制作
-
新闻列表页的制作
-
2020牛客多校暑期集训营第一场题解.pdf
-
TRIxIDC 数实共生——未来经济白皮书2021(移动版)
-
Java Web开发之Java语言基础
-
web-反序列化+php://input与post
-
2020牛客多校暑期集训营第八场题解.pdf
-
科技推开粒子特效.zip
-
智联万物,京东IoT技术创新与实践
-
Python编写小型购物车程序
-
2020牛客暑期多校集训营第五场题解.pdf
-
pyechart数据可视化
-
FPGA 之 SOPC 系列(五)Nios II 软件使用与程序开发 I
-
易语言子程序的调用.e
-
jquery如何使用正则
-
Selenium3分布式与虚拟化
-
Scan.unitypackage