以下是一个使用 cURL 进行 HTTP 请求的 PHP 函数示例,支持独享 IP 模式和隧道代理。
/**
* 使用 cURL 发起 HTTP 请求并支持独享 IP 代理
*
* @param string $url 请求的 URL
* @param array $data 发送的 POST 数据 (可选)
* @param array $headers HTTP 头信息 (可选)
* @param int $second 请求超时时间 (秒)
* @return string|false 请求的响应结果,失败返回 false
*/
function getdata($url, $data = [], $headers = [], $second = 60) {
$ch = curl_init();
// 设置请求超时时间
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
// 设置请求的 URL
curl_setopt($ch, CURLOPT_URL, $url);
// 添加默认的 'Expect: ' 头,防止 100-continue 的问题
$headers = array_merge(['Expect: '], $headers);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// SSL 相关配置
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// 使用 HTTP 1.0 协议
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
// 仅解析 IPv4 地址
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
// 允许重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// 返回请求结果而非直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 使用独享 IP 模式或隧道代理(可选)
curl_setopt($ch, CURLOPT_PROXY, 'http://wy11:1121@101.89.161.13:20182');
// 如果需要,可以设置为 SOCKS5 或 HTTP 代理
// curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
// curl_setopt($ch, CURLOPT_PROXY, 'socks5://user:pass@host:port');
// 设置 POST 数据(如果有)
if ($data) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
// 执行请求并获取结果
$result = curl_exec($ch);
$responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// 判断请求是否成功
if ($responseCode == 200) {
curl_close($ch);
return $result;
} else {
$error = curl_errno($ch);
curl_close($ch);
return false; // 返回 false 以表示请求失败
}
}
代码说明
- curl_setopt:用于设置 cURL 请求的各项参数。
- CURLOPT_PROXY:指定代理服务器地址(在此示例中为独享 IP 模式)。
- CURLOPT_PROXYTYPE:指定代理类型(如
CURLPROXY_SOCKS5
)。 - CURLOPT_TIMEOUT:设置请求的超时时间。
- CURLOPT_RETURNTRANSFER:设为
true
时,cURL 将返回请求的响应而不是直接输出。
使用示例
$url = "https://example.com/api";
$response = getdata($url, ['param' => 'value']);
if ($response) {
echo "请求成功: " . $response;
} else {
echo "请求失败";
}
此函数可以根据实际需求进行修改和扩展,如添加更多的错误处理、日志记录或调试信息。