5、什么是CURL?
在PHP中,CURL并不是一个函数,而是一组系列函数,它主要用于模拟HTTP请求,常用于发送API接口请求,
虽然可以使用file_get_content()函数也可以发送HTTP请求,但是CURL支持设置cookie信息,设置浏览器动词,设置请求类型,自定义请求头等。
总结,CURL可以细化HTTP请求,而file_get_content()函数只能简单的发起请求。
6、CURL的组合步骤
使用PHP进行CURL组合,完成一个HTTP请求的发送一般由以下几个步骤所组成:
1、初始化连接句柄;
2、设置CURL选项;
3、执行并获取结果;
4、释放CURL连接句柄。
7、CURL的5大函数介绍
以下5大函数,在CURL中最为常用,通常一个CURL连接,都是由这些函数所组成:
1、curl_init(),初始化连接句柄。
2、curl_setopt(),设置各类请求参数,例如:请求类型,自定义请求头等。
3、curl_exec(),发送CURL请求,并获得返回值。
4、curl_error(),获得CURL发送请求后的错误信息。
5、curl_close(),释放CURL连接句柄。
同时,CURL还有一个助手函数,是用于获得CURL的输出信息:curl_getinfo()
该函数的返回值是一个一维数组,其参数列表如下:
参数 | 解释 |
---|---|
url | 网络地址 |
content_type | 内容编码 |
http_code | HTTP状态码 |
header_size | header的大小 |
request_size | 请求的大小 |
filetime | 文件创建的时间 |
ssl_verify_result | SSL验证结果 |
redirect_count | 跳转计数 |
total_time | 总耗时 |
namelookup_time | DNS查询耗时 |
connect_time | 等待连接耗时 |
pretransfer_time | 传输前准备耗时 |
size_uplpad | 上传数据的大小 |
size_download | 下载数据的大小 |
speed_download | 下载速度 |
speed_upload | 上传速度 |
download_content_length | 下载内容的长度 |
upload_content_length | 上传内容的长度 |
starttransfer_time | 开始传输的时间表 |
redirect_time | 重定向耗时 |
8、curl_setopt()函数详解
在以上的6个函数中,除了初始化连接句柄不需要传递参数外,其他参数都需要传递参数,
而其他函数,除了curl_setopt()函数外,都只需要传递连接句柄的实例即可。
下面我们就来对这个curl_setopt()函数进行详细讲解。
curl_setopt()函数主要用于设置请求信息,该函数的参数格式如下:
curl_setopt(连接句柄, 系统参数变量, 对应参数);
在PHP中,CURL对应的系统参数变量多达上百个,我们只需要懂得其中一些常用的即可,
其他的可以参考官方文档:http://www.php.net/manual/zh/function.curl-setopt.php。
这些常用的系统参数变量中,以下这些在API请求中是必备的参数:
系统参数名 解释 参数内容
CURLOPT_URL 设置API请求地址 例如:http://api.junphp.com/v1/zoos
CURLOPT_RETURNTRANSFER curl_exec()执行成功后,是否直接输出返回值,然后返回TRUE true关闭输出,返回回调内容;false直接输出,返回true
CURLOPT_HEADER curl_exec()执行成功后,回调内容中是否需要携带HTTP投保信息 true是;false否
CURLOPT_POST 是否发送POST请求 true为POST,false为GET
CURLOPT_POSTFIELDS 当设置请求类型为POST时,请求携带的提交内容 该参数是一个数组,可以是多维数组;注意,如果我们设置请求头中数据提交类型为XML,则是一段XML格式的字符串
CURLOPT_TIMEOUT 一个请求最长等待多少秒,因为实际开发中,我们不可能无限的等待请求回调,如果请求一直不回调,我们一直在等待,这是不合理的 例如:60;注意该参数只能是整型数据类型。
CURLOPT_SSL_VERIFYPEER 对HTTPS协议的网址发送请求时,是否需要验签 true为需要,false不需要;注意该参数如果是请求HTTP的网址,不需要设置,如果是HTTPS,通常设置为false
CURLOPT_SSL_VERIFYSTATUS HTTPS证书状态 该参数与CURLOPT_SSL_VERIFYPEER的参数保持一致
CURLOPT_HTTPHEADER 设置请求头 该参数是个一维数组,例如:[‘Access-token:zxc’, ‘Sign:123’],不需要键对值。
CURLOPT_COOKIE 携带的COOKIE信息 cookie的信息
CURLOPT_CUSTOMREQUEST 携带请求的HTTP动词 例如:PUT、PATCH、DELETE