You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术求助:如何避免代码重复(复制粘贴代码),提升编程效率

解决代码重复:封装Curl请求逻辑的实用技巧

嘿,自学编程碰到代码重复的问题太正常了——谁刚开始写代码没复制粘贴过重复逻辑呢!咱们针对你的Curl函数来一步步优化,彻底摆脱复制粘贴的麻烦。

核心思路:把重复的Curl请求逻辑抽成独立函数

从你给出的代码片段来看,你应该是在循环里多次执行Curl请求,每次请求的初始化、设置、执行、关闭步骤基本一致,这就是重复代码的根源。咱们把这部分通用逻辑单独封装成一个小函数,之后只需要调用它就行。

第一步:封装单次Curl请求的通用函数

// 把单次Curl请求的逻辑单独拎出来,作为私有方法复用
private function sendCurlRequest($targetUrl, $userAgent) {
    // 初始化Curl句柄
    $curlHandle = curl_init();
    
    // 设置通用的Curl选项(可根据需求添加更多,比如超时、SSL验证等)
    curl_setopt($curlHandle, CURLOPT_URL, $targetUrl);
    curl_setopt($curlHandle, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curlHandle, CURLOPT_FOLLOWLOCATION, true); // 自动跳转
    
    // 执行请求并获取响应
    $response = curl_exec($curlHandle);
    
    // 检查请求是否出错
    if(curl_errno($curlHandle)) {
        throw new Exception("Curl请求失败: " . curl_error($curlHandle));
    }
    
    // 关闭Curl句柄
    curl_close($curlHandle);
    
    return $response;
}

第二步:修改原Curl函数,复用封装好的请求逻辑

现在你的主函数里就不用重复写Curl的初始化、设置代码了,直接调用上面的函数即可:

public function Curl($page, $check_top = 0, $pages = 1, $pagesources = array()){ 
    //$page 为目标URL 
    //$check_top 0 = 假,1 = 真;为真时需同时检查真假两种情况 
    //$pages 为需要检查的页面数量 
    $agent = "Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0"; 
    
    try{ 
        for($i = 0; $i < $pages; $i++){
            // 生成当前页的请求URL(根据你的分页规则调整,这里假设是page参数)
            $currentRequestUrl = $page . ($pages > 1 ? "?page=" . ($i + 1) : "");
            
            // 调用封装好的函数,获取页面源码
            $pageSource = $this->sendCurlRequest($currentRequestUrl, $agent);
            
            // 处理check_top的逻辑,同样复用请求函数
            if($check_top === 1){
                // 假设需要请求带check_top参数的URL,直接调用封装函数
                $topCheckUrl = $currentRequestUrl . "&check_top=1";
                $topPageSource = $this->sendCurlRequest($topCheckUrl, $agent);
                $pagesources[] = [$pageSource, $topPageSource];
            } else {
                $pagesources[] = $pageSource;
            }
        }
        
        return $pagesources;
    } catch(Exception $e){
        // 异常处理,比如记录日志或者返回错误信息
        error_log("Curl操作出错: " . $e->getMessage());
        return $pagesources;
    }
}

额外的代码优化小建议

  • 把通用配置抽成常量/属性:比如User-Agent、Curl超时时间这些固定值,可以定义成类的常量,不用每次在函数里写死:
    const DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0";
    const CURL_TIMEOUT = 10;
    
  • 复用响应处理逻辑:如果之后需要对返回的页面源码做解析(比如提取内容),也可以把解析逻辑封装成独立函数,避免重复写解析代码。
  • 使用类型声明:给函数参数和返回值加上类型声明,让代码更清晰,也能提前发现错误。

自学编程的过程中,学会抽离重复逻辑是迈向“写出干净代码”的重要一步,多练几次就会越来越顺手啦!

内容的提问来源于stack exchange,提问作者Samo_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:07:38