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

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

以下是一个使用 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开发

推荐文章

使用 sync.Pool 优化 Go 程序性能
2024-11-19 05:56:51 +0800 CST
Nginx 反向代理
2024-11-19 08:02:10 +0800 CST
Web 端 Office 文件预览工具库
2024-11-18 22:19:16 +0800 CST
MySQL用命令行复制表的方法
2024-11-17 05:03:46 +0800 CST
js生成器函数
2024-11-18 15:21:08 +0800 CST
利用Python构建语音助手
2024-11-19 04:24:50 +0800 CST
Go 开发中的热加载指南
2024-11-18 23:01:27 +0800 CST
Vue3中的v-model指令有什么变化?
2024-11-18 20:00:17 +0800 CST
宝塔面板 Nginx 服务管理命令
2024-11-18 17:26:26 +0800 CST
mysql int bigint 自增索引范围
2024-11-18 07:29:12 +0800 CST
在JavaScript中实现队列
2024-11-19 01:38:36 +0800 CST
免费常用API接口分享
2024-11-19 09:25:07 +0800 CST
JavaScript 上传文件的几种方式
2024-11-18 21:11:59 +0800 CST
js常用通用函数
2024-11-17 05:57:52 +0800 CST
实用MySQL函数
2024-11-19 03:00:12 +0800 CST
JavaScript中设置器和获取器
2024-11-17 19:54:27 +0800 CST
程序员茄子在线接单