php curl 发起get和post网络请求
curl介绍
curl是一个开源的网络链接库,支持http, https, ftp, gopher, telnet, dict, file, and ldap 协议。之前均益介绍了python版本的pycurl http://junyiseo.com/python/607.html ,现在介绍怎么使用php版本的URL.
curl get请求
function curl_get($url){ $header = array(
'Accept: application/json',
);
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
// 超时设置,以秒为单位
curl_setopt($curl, CURLOPT_TIMEOUT, 1); // 超时设置,以毫秒为单位
// curl_setopt($curl, CURLOPT_TIMEOUT_MS, 500); // 设置请求头
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
//执行命令
$data = curl_exec($curl); // 显示错误信息
if (curl_error($curl)) {
print "Error: " . curl_error($curl);
} else {
// 打印返回的内容
var_dump($data);
curl_close($curl);
}
}
curl post请求
// $url 是请求的链接
// $postdata 是传输的数据,数组格式
function curl_post( $url, $postdata ) { $header = array(
'Accept: application/json',
); //初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 超时设置
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 超时设置,以毫秒为单位
// curl_setopt($curl, CURLOPT_TIMEOUT_MS, 500); // 设置请求头
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE ); //设置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
//执行命令
$data = curl_exec($curl); // 显示错误信息
if (curl_error($curl)) {
print "Error: " . curl_error($curl);
} else {
// 打印返回的内容
var_dump($data);
curl_close($curl);
}
}
常用参数
选项 | 将 value 设置为 | 备注 |
---|---|---|
CURLOPT_AUTOREFERER | TRUE 时将根据 Location: 重定向时,自动设置 header 中的Referer:信息。 | |
CURLOPT_BINARYTRANSFER | 设为 TRUE ,将在启用 CURLOPT_RETURNTRANSFER 时,返回原生的(Raw)输出。 | 从 PHP 5.1.3 开始,此选项不再有效果:使用CURLOPT_RETURNTRANSFER 后总是会返回原生的(Raw)内容。 |
CURLOPT_COOKIESESSION | 设为 TRUE 时将开启新的一次 cookie 会话。它将强制 libcurl 忽略之前会话时存的其他 cookie。 libcurl 在默认状况下无论是否为会话,都会储存、加载所有 cookie。会话 cookie 是指没有过期时间,只存活在会话之中。 | |
CURLOPT_CERTINFO | TRUE 将在安全传输时输出 SSL 证书信息到 STDERR。 | 在 cURL 7.19.1 中添加。 PHP 5.3.2 后有效。 需要开启 CURLOPT_VERBOSE 才有效。 |
CURLOPT_CONNECT_ONLY | TRUE 将让库执行所有需要的代理、验证、连接过程,但不传输数据。此选项用于 HTTP、SMTP 和 POP3。 | 在 7.15.2 中添加。 PHP 5.5.0 起有效。 |
CURLOPT_CRLF | 启用时将Unix的换行符转换成回车换行符。 | |
CURLOPT_DNS_USE_GLOBAL_CACHE | TRUE 会启用一个全局的DNS缓存。此选项非线程安全的,默认已开启。 | |
CURLOPT_FAILONERROR | 当 HTTP 状态码大于等于 400,TRUE 将将显示错误详情。 默认情况下将返回页面,忽略 HTTP 代码。 | |
CURLOPT_SSL_FALSESTART | TRUE 开启 TLS False Start (一种 TLS 握手优化方式) | cURL 7.42.0 中添加。自 PHP 7.0.7 起有效。 |
CURLOPT_FILETIME | TRUE 时,会尝试获取远程文档中的修改时间信息。 信息可通过curl_getinfo()函数的CURLINFO_FILETIME 选项获取。 | |
CURLOPT_FOLLOWLOCATION | TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。(注意:这是递归的,"Location: " 发送几次就重定向几次,除非设置了 CURLOPT_MAXREDIRS,限制最大重定向次数。)。 | |
CURLOPT_FORBID_REUSE | TRUE 在完成交互以后强制明确的断开连接,不能在连接池中重用。 | |
CURLOPT_FRESH_CONNECT | TRUE 强制获取一个新的连接,而不是缓存中的连接。 | |
CURLOPT_FTP_USE_EPRT | TRUE 时,当 FTP 下载时,使用 EPRT (和 LPRT)命令。 设置为 FALSE 时禁用 EPRT 和 LPRT,仅仅使用PORT 命令。 | |
CURLOPT_FTP_USE_EPSV | TRUE 时,在FTP传输过程中,回到 PASV 模式前,先尝试 EPSV 命令。设置为 FALSE 时禁用 EPSV。 | |
CURLOPT_FTP_CREATE_MISSING_DIRS | TRUE 时,当 ftp 操作不存在的目录时将创建它。 | |
CURLOPT_FTPAPPEND | TRUE 为追加写入文件,而不是覆盖。 | |
CURLOPT_TCP_NODELAY | TRUE 时禁用 TCP 的 Nagle 算法,就是减少网络上的小包数量。 | PHP 5.2.1 有效,编译时需要 libcurl 7.11.2 及以上。 |
CURLOPT_FTPASCII | CURLOPT_TRANSFERTEXT 的别名。 | |
CURLOPT_FTPLISTONLY | TRUE 时只列出 FTP 目录的名字。 | |
CURLOPT_HEADER | 启用时会将头文件的信息作为数据流输出。 | |
CURLINFO_HEADER_OUT | TRUE 时追踪句柄的请求字符串。 | 从 PHP 5.1.3 开始可用。CURLINFO_ 的前缀是有意的(intentional)。 |
CURLOPT_HTTPGET | TRUE 时会设置 HTTP 的 method 为 GET,由于默认是 GET,所以只有 method 被修改时才需要这个选项。 | |
CURLOPT_HTTPPROXYTUNNEL | TRUE 会通过指定的 HTTP 代理来传输。 | |
CURLOPT_MUTE | TRUE 时将完全静默,无论是何 cURL 函数。 | 在 cURL 7.15.5 中移出(可以使用 CURLOPT_RETURNTRANSFER 作为代替) |
CURLOPT_NETRC | TRUE 时,在连接建立时,访问~/.netrc文件获取用户名和密码来连接远程站点。 | |
CURLOPT_NOBODY | TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE时不会变成 GET。 | |
CURLOPT_NOPROGRESS |
TRUE 时关闭 cURL 的传输进度。
|
|
CURLOPT_NOSIGNAL | TRUE 时忽略所有的 cURL 传递给 PHP 进行的信号。在 SAPI 多线程传输时此项被默认启用,所以超时选项仍能使用。 | cURL 7.10时被加入。 |
CURLOPT_PATH_AS_IS | TRUE 不处理 dot dot sequences (即 ../ ) | cURL 7.42.0 时被加入。 PHP 7.0.7 起有效。 |
CURLOPT_PIPEWAIT | TRUE 则等待 pipelining/multiplexing。 | cURL 7.43.0 时被加入。 PHP 7.0.7 起有效。 |
CURLOPT_POST | TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。 | |
CURLOPT_PUT | TRUE 时允许 HTTP 发送文件。要被 PUT 的文件必须在 CURLOPT_INFILE和CURLOPT_INFILESIZE 中设置。 | |
CURLOPT_RETURNTRANSFER | TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。 | |
CURLOPT_SAFE_UPLOAD | TRUE 禁用 @ 前缀在 CURLOPT_POSTFIELDS 中发送文件。 意味着 @ 可以在字段中安全得使用了。 可使用 CURLFile 作为上传的代替。 | PHP 5.5.0 中添加,默认值 FALSE。 PHP 5.6.0 改默认值为 TRUE。. PHP 7 删除了此选项, 必须使用 CURLFile interface 来上传文件。 |
CURLOPT_SASL_IR | TRUE 开启,收到首包(first packet)后发送初始的响应(initial response)。 | cURL 7.31.10 中添加,自 PHP 7.0.7 起有效。 |
CURLOPT_SSL_ENABLE_ALPN | FALSE 禁用 SSL 握手中的 ALPN (如果 SSL 后端的 libcurl 内建支持) 用于协商到 http2。 | cURL 7.36.0 中增加, PHP 7.0.7 起有效。 |
CURLOPT_SSL_ENABLE_NPN | FALSE 禁用 SSL 握手中的 NPN(如果 SSL 后端的 libcurl 内建支持),用于协商到 http2。 | cURL 7.36.0 中增加, PHP 7.0.7 起有效。 |
CURLOPT_SSL_VERIFYPEER | FALSE 禁止 cURL 验证对等证书(peer's certificate)。要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录。 | 自cURL 7.10开始默认为 TRUE。从 cURL 7.10开始默认绑定安装。 |
CURLOPT_SSL_VERIFYSTATUS | TRUE 验证证书状态。 | cURL 7.41.0 中添加, PHP 7.0.7 起有效。 |
CURLOPT_TCP_FASTOPEN | TRUE 开启 TCP Fast Open。 | cURL 7.49.0 中添加, PHP 7.0.7 起有效。 |
CURLOPT_TFTP_NO_OPTIONS | TRUE 不发送 TFTP 的 options 请求。 | 自 cURL 7.48.0 添加, PHP 7.0.7 起有效。 |
CURLOPT_TRANSFERTEXT | TRUE 对 FTP 传输使用 ASCII 模式。对于LDAP,它检索纯文本信息而非 HTML。在 Windows 系统上,系统不会把 STDOUT 设置成二进制 模式。 | |
CURLOPT_UNRESTRICTED_AUTH | TRUE 在使用CURLOPT_FOLLOWLOCATION重定向 header 中的多个 location 时继续发送用户名和密码信息,哪怕主机名已改变。 | |
CURLOPT_UPLOAD | TRUE 准备上传。 | |
CURLOPT_VERBOSE | TRUE 会输出所有的信息,写入到STDERR,或在CURLOPT_STDERR中指定的文件。 |
php curl 发起get和post网络请求的更多相关文章
- curl模拟安卓手机进行网络请求
$url = "http://somedomain/ver/ffffffff-e31e-85d5-ffff-ffffa6220605/2/en/b0:79:94:e7:99:4a/3.5&q ...
- 第六十二篇、AFN3.0封装网络请求框架,支持缓存
1.网络请求 第一种实现方式: 功能:GET POST 请求 缓存逻辑: 1.是否要刷新本地缓存,不需要就直接发起无缓存的网络请求,否则直接读取本地数据 2.需要刷新本地缓存,先读取本地数据,有就返回 ...
- android4.0 HttpClient 以后不能在主线程发起网络请求
android4.0以后不能在主线程发起网络请求,该异步网络请求. new Thread(new Runnable() { @Override public void run() { // TODO ...
- php 使用curl发起https请求
今天一个同事反映,使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: erro ...
- 老李分享:curl发起https请求
老李分享:curl发起https请求 在POPTEST上课的过程中,我们需要本地模拟https请求来完成性能测试,我们用curl来实现,curl是利用URL语法在命令行方式下工作的开源文件传输工具,使 ...
- 使用axios优雅的发起网络请求
原文链接:https://www.jianshu.com/p/73585303fdc0 公司项目使用了vue作为技术栈,便理所应当地使用了官方推荐的axios进行网络请求,这里记录下axios的封装方 ...
- 后台curl网络请求
<?php //前端进行网络请求 ajax //后台进行网络请求用到两种方式 curl socket //进行网络请求的步骤 //1.初始化一个curl //2.对curl进行配置 // ...
- 网络请求工具 cURL
网络请求工具 cURL 2017-08-16 cRUL 是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在“标准输出”(stdout)上面. 查看网页源码 1 $ curl baidu. ...
- http 使用curl发起https请求报错的解决办法
使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: error:1409008 ...
随机推荐
- navicate 连接mysql8.0,个人踩坑问题汇总
navicate 连接mysql8.0,个人踩坑问题汇总本文目录:1:安装mysql8.0新增全新验证方式,安装如果不修改mysql连接不上2:mysql启动命令问题3:navicate 运程连接My ...
- 【笔记】机器学习 - 李宏毅 - 7 - Deep Learning
深度学习发展历史: 感知机和逻辑回归很像,只是没有\(sigmoid\)激活函数. 深度学习训练的三个步骤: Step1:神经网络(Neural network) Step2:模型评估(Goodnes ...
- Mybaits(10)N+1问题
N+1问题 从上面的例子日志中我们可以看到所有级联都成功了,但是引发了性能问题,例如我们在查询雇员的信息和工作任务信息,此时体检表和工牌信息就是多余,我们没必要查询一次.如果想日志体现的那样,取出了所 ...
- LeetCode30 Hard 查找所有子串
本文始发于个人公众号:TechFlow,原创不易,求个关注 链接 Substring with Concatenation of All Words 难度 Hard 描述 给定一个字符串s作为母串,和 ...
- Vue(三)--循环语句
v-for: v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组并且 site 是数组元素迭代的别名. demo1. <!DOCTYPE html&g ...
- 查看appium参数
首先打开appium server并运行,然后将手机与电脑相连,然后在python中写代码,但是代码需要出入appium参数,这些参数怎么查询呢? 1.创建appium参数 { "platf ...
- VS中关于数据库的操作
1.数据库迁移 第一步: 第二步: 在窗口中选择项目中的EntitiyFramwork项目(与数据库连接的文件集) 第三步: 输入update-database 二:数据对比 第一步: 第二步:选择需 ...
- 支付宝网站支付接口配置 RSA 公钥 私钥
个人博客 地址:http://www.wenhaofan.com/article/20190419143333 下载签名工具 访问:https://docs.open.alipay.com/291/1 ...
- 入门移动端混合开发 实战京东 APP(完整更新)
课程资料获取链接:点击这里 混合开发入门 主流开发方案实战京东移动端APP 无需原生开发基础,也能完美呈现京东商城.本课程融合vue.Android.IOS等目前流行的前端和移动端技术,混合开发经典电 ...
- pandas玩转excel-> (1)如何利用pandas创建excel数据文件
#在Anaconda3 的Spyder中 #定义pandas模块为pd import pandas as pd #创建一个新的DataFrame对象,定义这个对象中有两个字段:ID和Name, ...