简介
PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。官方链接
使用
我们在使用CURL完成一个请求的时候一般需要下面几个步骤。
设置连接句柄
这里主要使用 curl_init()
函数
|
|
参数url不是必填项,用来初始化新的会话,返回cURL句柄,失败了返回false。
设置相关属性选项
主要使用 curl_setopt()
函数和 curl_setopt_array()
函数
|
|
其中可以设置的选项很多,具体的可以看官方这里
常用的如下:
CURLOPT_URL
: 设置请求的地址CURLOPT_HEADER
:设置请求header头信息,比如授权token啦,编码啦,格式啦之类.CURLOPT_CUSTOMREQUEST
: 设置请求方式 比如 get post head options之类CURLOPT_TIMEOUT
:设置执行的最大时间CURLOPT_CONNECTTIMEOUT
:设置发起连接前等待的时间CURLOPT_USERAGENT
:设置useragent信息CURLOPT_PORT
:设置端口信息CURLOPT_COOKIE
:设置http请求中的cookie信息(parameA=aaa;parameB=bbb)CURLOPT_POSTFIELDS
:如果是post请求设置的请求参数
执行获取结果
主要使用 curl_exec()
函数.这个函数应该在初始化一个 cURL 会话并且全部的选项都被设置后被调用。
|
|
关闭连接句柄
主要使用 curl_close()
函数
|
|
错误码
在获取执行结果的时候有时候会失败,这个获取错误码就很重要了。
|
|
之前常遇到过的错误码有
5:CURLE_COULDNT_RESOLVE_PROXY
= 指定的代理服务器主机无法解析
6:CURLE_COULDNT_RESOLVE_HOST
= 指定的远程主机无法解析
28:CURLE_OPERATION_TIMEDOUT
= 已达到根据相应情况指定的超时时间
33:CURLE_RANGE_ERROR
= 服务器不支持或不接受范围请求
56:CURLE_RECV_ERROR
= 接收网络数据失败
更多错误码 中文这里
|
|
英文原版错误码见 这里;
设置代理
对于一些墙外的请求需要设置一下代理,本地有 Shadowsocks 之类工具的可以这样设置
|
|
SS原理见 这里