编程 PHP 使用代理 IP 通过 cURL 请求数据

2024-11-19 02:52:08 +0800 CST views 1082

以下是一个使用 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 "请求失败";
}

此函数可以根据实际需求进行修改和扩展,如添加更多的错误处理、日志记录或调试信息。

复制全文 生成海报 编程 网络请求 PHP开发

推荐文章

php微信文章推广管理系统
2024-11-19 00:50:36 +0800 CST
Golang Sync.Once 使用与原理
2024-11-17 03:53:42 +0800 CST
html折叠登陆表单
2024-11-18 19:51:14 +0800 CST
在Rust项目中使用SQLite数据库
2024-11-19 08:48:00 +0800 CST
Vue3结合Driver.js实现新手指引功能
2024-11-19 08:46:50 +0800 CST
api接口怎么对接
2024-11-19 09:42:47 +0800 CST
LLM驱动的强大网络爬虫工具
2024-11-19 07:37:07 +0800 CST
npm速度过慢的解决办法
2024-11-19 10:10:39 +0800 CST
Vue3中如何处理组件间的动画?
2024-11-17 04:54:49 +0800 CST
Go语言中的`Ring`循环链表结构
2024-11-19 00:00:46 +0800 CST
Vue中的`key`属性有什么作用?
2024-11-17 11:49:45 +0800 CST
如何优化网页的 SEO 架构
2024-11-18 14:32:08 +0800 CST
Elasticsearch 监控和警报
2024-11-19 10:02:29 +0800 CST
JavaScript设计模式:发布订阅模式
2024-11-18 01:52:39 +0800 CST
快手小程序商城系统
2024-11-25 13:39:46 +0800 CST
php curl并发代码
2024-11-18 01:45:03 +0800 CST
程序员茄子在线接单