curl_setopt_array() 函数用于一次性为cURL传输会话批量设置多个选项。这个函数在需要设置大量cURL选项时非常有用,它比多次调用curl_setopt()更高效。
bool curl_setopt_array ( resource $ch , array $options )
| 参数 | 描述 | 类型 | 必需 |
|---|---|---|---|
| ch | 由 curl_init() 返回的cURL句柄 |
resource | 是 |
| options | 一个关联数组,指定要设置的选项及其值 | array | 是 |
如果全部选项都成功设置,返回 TRUE。如果无法设置任何一个选项,立即返回 FALSE,而后续的选项将不会被设置。
将所有选项放在一个数组中,使代码更加清晰易读。
减少函数调用次数,提高代码执行效率。
选项集中管理,便于修改和调试。
如果任何选项设置失败,会立即停止并返回错误。
@php
// 初始化cURL会话
$ch = curl_init();
// 使用curl_setopt_array设置多个选项
$options = [
CURLOPT_URL => "https://api.example.com/users",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_USERAGENT => "MyApp/1.0",
CURLOPT_FOLLOWLOCATION => true
];
if (curl_setopt_array($ch, $options)) {
$response = curl_exec($ch);
if (curl_error($ch)) {
echo 'cURL Error: ' . curl_error($ch);
} else {
echo $response;
}
} else {
echo "Failed to set cURL options";
}
curl_close($ch);
@endphp
@php
$ch = curl_init();
// POST数据
$postData = [
'name' => 'John Doe',
'email' => 'john@example.com',
'age' => 30
];
$options = [
CURLOPT_URL => "https://api.example.com/users",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($postData),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer your_token_here',
'User-Agent: MyApp/1.0'
],
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false
];
if (curl_setopt_array($ch, $options)) {
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode === 200) {
$data = json_decode($result, true);
print_r($data);
} else {
echo "HTTP Error: " . $httpCode;
}
} else {
echo "Failed to set cURL options";
}
curl_close($ch);
@endphp
@php
$ch = curl_init();
// 文件上传数据
$file = '/path/to/upload.jpg';
$postData = [
'file' => new CURLFile($file),
'description' => 'Profile picture',
'user_id' => 123
];
$options = [
CURLOPT_URL => "https://api.example.com/upload",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData,
CURLOPT_HTTPHEADER => [
'Content-Type: multipart/form-data',
'X-API-Key: your_api_key'
],
CURLOPT_TIMEOUT => 60, // 文件上传可能需要更长时间
CURLOPT_SSL_VERIFYPEER => false
];
if (curl_setopt_array($ch, $options)) {
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Upload Error: ' . curl_error($ch);
} else {
$uploadResult = json_decode($response, true);
if (isset($uploadResult['success'])) {
echo "File uploaded successfully!";
} else {
echo "Upload failed: " . $uploadResult['error'];
}
}
} else {
echo "Failed to set cURL options for upload";
}
curl_close($ch);
@endphp
@php
$ch = curl_init();
$options = [
CURLOPT_URL => "https://example.com",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30
];
curl_setopt_array($ch, $options);
@endphp
@php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
@endphp