curl_setopt() 函数用于设置cURL传输选项,控制cURL会话的行为。通过该函数可以设置URL、请求方法、超时时间、请求头等各种参数。
bool curl_setopt ( resource $ch , int $option , mixed $value )
| 参数 | 描述 | 类型 | 必需 |
|---|---|---|---|
| ch | 由 curl_init() 返回的cURL句柄 |
resource | 是 |
| option | 需要设置的CURLOPT_XXX选项 | int | 是 |
| value | 选项要设置的值 | mixed | 是 |
成功时返回 TRUE,失败时返回 FALSE。
<?php
// 初始化cURL
$ch = curl_init();
// 设置基本选项
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/users");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// 执行请求
$response = curl_exec($ch);
if (curl_error($ch)) {
echo 'Error: ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
?>
<?php
$ch = curl_init();
// 使用数组一次性设置多个选项
$options = [
CURLOPT_URL => "https://api.example.com/login",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'username' => 'admin',
'password' => 'secret'
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'User-Agent: MyApp/1.0'
],
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => true
];
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://secure.example.com/api");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// SSL相关设置
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不验证对等证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 不验证主机
// 代理设置(如果需要)
curl_setopt($ch, CURLOPT_PROXY, "proxy.example.com:8080");
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "username:password");
// 调试信息
curl_setopt($ch, CURLOPT_VERBOSE, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'cURL Error: ' . curl_error($ch);
} else {
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo "HTTP Code: " . $httpCode . "\n";
echo "Response: " . $response;
}
curl_close($ch);
?>
<?php
$ch = curl_init();
// 文件上传
$file = '/path/to/file.jpg';
$postData = [
'file' => new CURLFile($file),
'description' => 'My uploaded file'
];
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/upload");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 自定义头信息
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer your_access_token',
'Content-Type: multipart/form-data',
'X-Custom-Header: custom_value'
]);
// 进度回调函数(PHP 5.5+)
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function($resource, $download_size, $downloaded, $upload_size, $uploaded) {
if ($upload_size > 0) {
$progress = round(($uploaded / $upload_size) * 100);
echo "Upload progress: {$progress}%\n";
}
});
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>