php中cURL的各种基本用法


CURL是PHP中一个非常强大的开源库,支持许多协议,包括HTTP、 FTP、 TELNET等。我们使用它来发送HTTP请求,可以通过灵活的选项设置不同的HTTP协议参数并支持HTTPS.CURL可以根据URL前缀是“ HTTP”还是“ HTTPS”自动选择是否发送加密的内容,还可以使用URL的语法模拟浏览器来传输数据 ,总之功能非常强大。

如果没有开启curl扩展,可以在php.ini里面开启curl这个扩展。下面我们来介绍一下curl的基本用法吧。

基本的语法

$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
$result = curl_exec( $ch );
curl_close( $ch );

#curl_init() 初始化CURL连接

#curl_setopt()函数将为一个CURL会话设置选项,option参数是你想要的设置,value是这个选项给定的值。

#curl_exec() 执行并获取HTML文档内容

#curl_close() 关闭cURL会话链接

开机自检

$params = [ 'key'=>'value', ];
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'POST' );
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query($params) );

#http_build_query()函数的作用是使用给出的关联或下标数组生成一个经过 URL-encode 的请求字符串。

# 使用 CURL来提交POST数据的时候,对数据自检。

Cookies的使用

$cookie = '/cookie.txt';
curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookie );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );

#设置一个整形数,作为最大超时,单位(秒)。

错误处理

curl_setopt( $ch, CURLOPT_FAILONERROR, true );

# 如果CURLOPT_FAILONERROR为false,则http错误不会触发curl错误。

重定向设置

curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 20 );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );

#三个选项分别是允许重定向,最大重定向数和是否自动添加索引来源网址。

获取重定向目标URL

$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
// option…
curl_exec( $ch );
$result = curl_getinfo( $ch, CURLINFO_EFFECTIVE_URL );
curl_close( $ch );

SSL措施

curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );

我们使用浏览器访问https的时候,浏览器会自动加载网站的安全证书进行加密。但是你用curl请求https时,没有通过浏览器,就只有自己手动增加一个安全证书进行加密,设置为FALSE 禁止 cURL 验证对等证书。

BASIC认证

$user = 'user';
$pass = '123456';
curl_setopt( $ch, CURLOPT_USERPWD, $id .":". $pass);

#传递一个形如[username]:[password]风格的字符串,作用PHP去连接。

UA设定

curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_USERAGENT, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

#模拟游览器的ua,可以根据需要设置成pc端ua或者手机端的ua。

请求标头设置

$headers = array(
"HTTP/1.0",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,<em>/</em>;q=0.8",
"Accept-Encoding:gzip ,deflate",
"Accept-Language:ja,en-us;q=0.7,en;q=0.3",
"Connection:keep-alive",
"User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:26.0) Gecko/20100101 Firefox/26.0"
);

curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );

#模拟游览器请求头信息,可以在游览器F12进入审查元素里面获得。

乱码对策

curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
$result = curl_exec( $ch );
$content = mb_convert_encoding( $result, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' );

#目的是把UTF-8,GBK,GB2312,BIG5这几种编码转成UTF-8编码,防止乱码。