curl_setopt是PHP cURL库中的一个函数,用于为CURL请求设置选项。cURL是一种能够在网上工作的开放源代码库,用于传输数据,并支持各种协议,如HTTP、HTTPS、FTP等。在本篇文章中,我们将探讨如何使用curl_setopt函数,以便使用CURL请求的选项。
1、cURL和curl_setopt函数基础
通过cURL库和curl_setopt函数,我们可以使用PHP来模拟浏览器,执行各种网页操作。这可以使我们从脚本中自动化执行常规的网页程序,如访问网页、登录网站,从远程服务器中获取数据等。我们可以使用curl_setopt函数来设置请求选项,以达到我们的需求。
curl_setopt函数包含三个参数,第一个参数是一个CURL句柄,它是cURL会话的句柄,用于执行各项任务,比如打开一个URL。第二个参数是一个整数值,它表示我们想要设置的选项,如CURLOPT_URL表示我们要请求数据的URL地址。第三个参数是选项的值。
使用curl_setopt函数时,可以一次性修改多个选项,使用逗号分隔。此外,curl_setopt函数也可以使用默认选项,这些选项通常在cURL初始化时设置。
下面是一个基本的示例,展示如何使用curl_setopt函数和cURL库创建一个HTTP请求:
// 初始化一个cURL会话
$ch = curl_init();
//设置请求选项
curl_setopt($ch, CURLOPT_URL, "https://www.example.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 获取请求结果
$result = curl_exec($ch);
// 关闭处理退欧
curl_close($ch);
echo $result;
?>
在上面的例子中,我们使用了curl_setopt函数来设置选项。第一个选项,CURLOPT_URL,是必需的,它指定了我们要请求的 URL。第二个选项,CURLOPT_RETURNTRANSFER,运行 cURL 函数执行之后将返回结果储存到变量中,而不是直接输出到浏览器。第三个选项,CURLOPT_HEADER,禁用了请求头的输出。最后,我们执行了curl_exec函数,该函数将返回请求的结果。
2、curl_setopt常见选项
curl_setopt函数可以接受多个选项,并采用关联数组的键值对样式,详细定义了每个选项都代表什么意思。
下面是一些常见的curl_setopt选择器和他们的意义:
CURLOPT_URL:设置请求的URL地址。
CURLOPT_RETURNTRANSFER:设置一旦请求完成,将结果返回而不是直接输出。
CURLOPT_FOLLOWLOCATION:设置重定向地址是否要被接受。
CURLOPT_POST:启用 POST 请求。
CURLOPT_POSTFIELDS:包含 `POST` 数据的字符串。
CURLOPT_CUSTOMREQUEST:设置指定请求的 HTTP 方法。
CURLOPT_HTTPHEADER:设置HTTP请求头。
CURLOPT_HEADER:浏览器实际上永远不会看到,但是很有用,因为它允许你在输出之前更改或解析头文件。
CURLOPT_COOKIEJAR:指向包含Cookies的文件名称。
CURLOPT_COOKIEFILE:包含Cookie数据的文件名。
CURLOPT_SSL_VERIFYHOST:即使已经鉴定了,仍需要检查证书的来源。0表示关闭检查。
CURLOPT_SSL_VERIFYPEER:设置为0时忽略SSL证书验证,并允许使用self-signed证书。默认情况下,此选项设置为1,表示验证SSL证书。
3、使用PHP curl_setopt发送HTTP头
若需要向curl_setopt发送HTTP头,则需要启用选项CURLOPT_HEADER。以下示例应用了此选项。
$url = "http://example.com/get_header.php";
$ch = curl_init();
//设置请求选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
// 执行请求
$result = curl_exec($ch);
// 关闭请求句柄
curl_close($ch);
//包含 HTTP 信息
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($result, 0, $header_size);
$body = substr($result, $header_size);
echo $header;
echo $body;
?>
在如上示例中,我们首先定义了URL地址,然后创建了一个cURL会话。我们设置了CURLOPT_URL,它的值是$url,即我们想要检索HTTP头的网站的URL。
然后,我们启用了 CURLOPT_HEADER 选项,设置它为 true。这样,我们将收到HTTP响应的头信息,而不是常规的HTTP响应体。 下一步,执行请求并关闭cURL请求句柄。最后,我们使用cURL函数curl_getinfo检索了HTTP header的大小并输出结果。
4、使用curl_setopt自定义请求头
如果您需要完全控制HTTP请求头信息或自定义请求头,则可以通过设置CURLOPT_HTTPHEADER选项来实现。以下是一个包含自定义请求头的代码示例:
$url = "http://example.com/";
$ch = curl_init();
//设置请求选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
// 自定义请求头
$headers = array(
"Content-Type: application/json",
"Authorization: Bearer ACCESS_TOKEN",
"Accept-Encoding: gzip, deflate, br",
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// 执行请求
$result = curl_exec($ch);
// 关闭cURL请求句柄
curl_close($ch);
echo $result;
?>
在上述示例中,我们首先定义了 URL。接下来,我们创建了cURL会话,然后设置了三个选项,其中包括 CURLOPT_HTTPHEADER ,我们将其设置为 $headers数组。
$headers数组包含我们想要发送的自定义请求头,它们逐个定义。例如,我们定义了一个标题 Content-Type ,它告诉服务器我们将发送 JSON 格式的消息体。我们还定义了Authorization标题,以便向服务器提供访问令牌的权限。
最后,我们使用curl_exec函数执行请求操作,然后关闭cURL请求句柄。这样,我们可以在脚本中完全控制HTTP请求头。
5、使用curl_setopt发送POST数据
在 POST 调用中,您需要使用 CURLOPT_POST 和 CURLOPT_POSTFIELDS 选项。CURLOPT_POST 应设置为 true,而 CURLOPT_POSTFIELDS 应设置为查询字符串格式的数据,这些数据将作为请求主体发送。
以下示例展示了如何使用这些选项:
$url = "http://example.com/";
$ch = curl_init();
//设置请求选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "name=JohnDoe&email=johndoe@example.com");
// 执行请求
$result = curl_exec($ch);
// 关闭请求句柄
curl_close($ch);
echo $result;
?>
在上述示例中,我们首先定义了URL地址 $url。然后,我们创建了cURL会话,设置了 CURLOPT_URL 和 CURLOPT_RETURNTRANSFER。CURLOPT_POST也被设置为1,表示这是一个POST请求。最后,我们使用 CURLOPT_POSTFIELDS 选项设置请求主体中的查询字符串格式数据。
在请求完毕后,我们关闭了cURL请求句柄,并输出了结果。
总结
在这篇文章中,我们开掘了如何使用 curl_setopt 设置 CURL 请求选项的各种方式。curl_setopt 函数是一个强大的工具,可以用来设置各种选项,例如设置 URL 地址、修改 HTTP 请求头和 POST 数据等。
PHP 提供了大量的 cURL 库和函数,您可以在业务中使用它们,充分发挥其作用。希望这篇文章对您有所帮助,并可以在日常工作中充分利用PHP中的cURL库。