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

PHP项目:基于ASN的分支逻辑代码正确性验证

代码问题分析与修正

你的代码不符合需求,存在几个关键问题,以下是详细说明和修正方案:

核心需求不匹配问题

  1. 字段取错:你需要判断的是ASN信息,但代码中使用的是$api->isp(ISP提供商名称),ip-api返回的ASN字段是$api->as,格式类似"AS1234 China Telecom"。
  2. 正则匹配错误:你的需求是匹配包含telecom的ASN,但代码里正则写的是/telekom/i(拼写错误,应为telecom)。

其他代码问题

  • use语句位置错误:use Facebook\Webdriver;必须放在PHP文件最顶部,不能在变量定义、函数调用等执行语句之后。
  • 缺少API请求错误处理:如果ip-api请求失败(比如网络故障、返回无效JSON),json_decode会返回null,直接访问$api->isp会触发致命错误。
  • 冗余变量:$useragent和$hata变量定义后未使用,可删除。
  • SSL验证关闭有风险:else块中关闭了SSL证书验证,生产环境下会导致请求易被劫持,建议删除这两行。
  • sleep等待不可靠:if块中用sleep(1)等待页面加载,无法保证页面完全渲染,应该用WebDriver的显式等待替代。

修正后的代码示例

<?php
use Facebook\WebDriver;
use Facebook\WebDriver\WebDriverWait;
use Facebook\WebDriver\WebDriverExpectedCondition;

// 获取访客IP(依赖Cloudflare, fallback到默认REMOTE_ADDR)
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'] ?? $_SERVER['REMOTE_ADDR'];

// 请求ip-api获取ASN信息
$apiResponse = file_get_contents("http://ip-api.com/json/{$ip}");
if (!$apiResponse) {
    die("无法获取IP信息");
}
$api = json_decode($apiResponse);
if (json_last_error() !== JSON_ERROR_NONE) {
    die("IP信息解析失败");
}

// 判断ASN是否包含telecom(不区分大小写)
if (preg_match("/telecom/i", $api->as)) {
    require_once __DIR__ . '/vendor/autoload.php';
    
    $host = 'http://localhost:4444/wd/hub';
    $proxyUrl = 'xx.xx.xx.xx:50100';

    $capabilities = new Facebook\WebDriver\Remote\DesiredCapabilities([
        Facebook\WebDriver\Remote\WebDriverCapabilityType::BROWSER_NAME => 'chrome',
        Facebook\WebDriver\Remote\WebDriverCapabilityType::PROXY => [
            'proxyType' => 'manual',
            'httpProxy' => $proxyUrl,
            'sslProxy' => $proxyUrl,
        ],
    ]);
    
    $driver = Facebook\WebDriver\Remote\RemoteWebDriver::create($host, $capabilities);
    $driver->get("https://xxxx.com");
    $driver->manage()->window()->maximize();
    
    // 显式等待页面加载完成(示例:等待body标签出现)
    (new WebDriverWait($driver, 10))->until(
        WebDriverExpectedCondition::presenceOfElementLocated(Facebook\WebDriver\WebDriverBy::tagName('body'))
    );
    
    $page_source = $driver->getPageSource();
    echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
            "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">';
    echo $page_source;
    $driver->quit();
} else { 
    $url = "https://xxxxx.com";
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
    $resp = curl_exec($curl);
    if (curl_errno($curl)) {
        die("请求失败:" . curl_error($curl));
    }
    curl_close($curl);
    echo $resp;
    exit;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:01:10