您的位置:

php curl_setopt的用法详解

php curl_setopt的用法详解

更新:

PHP cURL是一个用于与服务器进行通信和传输数据的强大库。它是使用URL语法进行传输的,支持众多的协议,如FTP、HTTP、HTTPS等。curl_setopt()是PHP cURL的主要函数之一,用于设置cURL选项。在本篇文章中,我们将深入剖析curl_setopt()函数的使用。

一、基本用法

curl_setopt()函数用于设置cURL选项。它接受三个参数:curl句柄、选项和值。下面是一个示例:

//初始化
$ch = curl_init();
//设置URL和其他选项
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, false);
//执行并获取HTML文档内容
$result = curl_exec($ch);
//关闭cURL资源释放系统资源
curl_close($ch);

在上述例子中,我们创建了一个curl句柄$ch,然后使用curl_setopt()函数来设置选项和值。最后,我们使用curl_exec()函数执行该句柄,获取了该URL的内容,并用curl_close()函数关闭了curl句柄。

二、设置URL

在curl_setopt()函数中,CURLOPT_URL选项表示要抓取的URL地址。可以是字符串形式的URI,也可以是资源型的URI。

//设置URL
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");

另外,还可以使用curl_init()函数内的URL参数来直接设置URL,也就是:

$ch = curl_init("http://www.example.com/");

三、设置代理

在curl_setopt()函数中,CURLOPT_PROXY选项表示要使用的代理服务器地址,CURLOPT_PROXYUSERPWD选项表示要使用的代理服务器的用户名和密码。

//设置代理服务器地址
curl_setopt($ch, CURLOPT_PROXY, "http://proxy.example.com:8080");
//设置代理服务器用户名和密码
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "username:password");

四、设置请求头

在curl_setopt()函数中,CURLOPT_HEADER选项表示要不要在输出中包含头部信息,CURLOPT_HTTPHEADER选项表示要发送的头部信息。

//获取头信息
curl_setopt($ch, CURLOPT_HEADER, true);
//设置头信息
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer 12345'));

五、设置POST请求参数

在curl_setopt()函数中,CURLOPT_POST选项表示要不要使用POST请求,CURLOPT_POSTFIELDS选项表示POST请求的参数。CURLOPT_POSTFIELDS不仅可以接受字符串形式的请求参数,还可以接受数组形式的参数。

//设置请求方式
curl_setopt($ch, CURLOPT_POST, true);
//设置POST请求参数
curl_setopt($ch, CURLOPT_POSTFIELDS, 'name=Lucy&age=20');
//设置数组形式的POST请求参数
curl_setopt($ch, CURLOPT_POSTFIELDS, array('name' => 'Lucy', 'age' => 20));

六、设置超时时间

在curl_setopt()函数中,CURLOPT_TIMEOUT选项表示请求的超时时间,单位为妙;CURLOPT_CONNECTTIMEOUT选项表示连接超时时间,单位为妙。

//设置超时时间
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
//设置连接超时时间
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);

七、设置cookie

在curl_setopt()函数中,CURLOPT_COOKIEJAR选项表示将获得的cookie信息写入到指定的文件,CURLOPT_COOKIEFILE选项则表示从指定的文件中读取cookie信息。

//写入cookie信息
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
//读取cookie信息
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');

八、设置SSL验证

在curl_setopt()函数中,CURLOPT_SSL_VERIFYHOST选项表示是否检查证书中的公共名和URL中的文本是否匹配,CURLOPT_SSL_VERIFYPEER选项表示是否检查SSL证书是否有效。

//开启SSL验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

如果要从HTTPS站点抓取数据,一般需要先获得证书,然后再启用SSL验证。下面是一个获取证书并启用SSL验证的例子:

//获取证书
$cert = 'path/to/cert.pem';
//启用SSL验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_CAINFO, $cert);

九、设置HTTP认证

在curl_setopt()函数中,CURLOPT_HTTPAUTH选项表示使用的HTTP认证方法,CURLOPT_USERPWD选项表示要使用的用户名和密码。

//使用HTTP认证方法
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
//设置用户名和密码
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');

十、设置重定向

在curl_setopt()函数中,CURLOPT_FOLLOWLOCATION选项表示是否自动跟随重定向,CURLOPT_MAXREDIRS选项表示跟随的最大重定向次数。

//自动跟随重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
//跟随的最大重定向次数
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);

十一、设置代理隧道

在curl_setopt()函数中,CURLOPT_HTTPPROXYTUNNEL选项表示是否启用代理隧道。

//启用代理隧道
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

总结

本文从基本用法、设置URL、设置代理、设置请求头、设置POST请求参数、设置超时时间、设置cookie、设置SSL验证、设置HTTP认证、设置重定向、设置代理隧道等多个方面详细讲解了curl_setopt()函数的使用。在实际使用中,可以选取适当的选项和值,以满足所需的功能。