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

如何从PHP响应头数据中提取动态生成的验证ID

从响应头的Location链接中提取动态ID

问题背景

需要从响应头的location字段链接(https://www.example.com/api/pub/v2/verifications/[动态ID])中提取后续的动态ID,且每次响应的ID都不同。当前已通过PHP代码获取到响应头数据,需添加提取ID的逻辑。

解决方案

在现有代码基础上,先定位到location响应头,再通过以下几种方法提取ID:

方法1:字符串替换截取

利用固定前缀直接截取ID,操作简单直接:

list($headers, $content) = explode("\r\n\r\n", $result, 2);
$targetPrefix = 'https://www.example.com/api/pub/v2/verifications/';
$verificationId = '';

foreach (explode("\r\n", $headers) as $hdr) {
    printf('<p>Header: %s</p>', $hdr);
    // 匹配location头
    if (str_starts_with(strtolower($hdr), 'location:')) {
        // 提取链接部分
        $locationUrl = trim(substr($hdr, strlen('location:')));
        // 去掉固定前缀得到ID
        $verificationId = str_replace($targetPrefix, '', $locationUrl);
        break; // 找到后直接跳出循环
    }
}

// 输出提取结果
if (!empty($verificationId)) {
    echo '<p>提取到的验证ID:' . $verificationId . '</p>';
}
echo $content;

方法2:正则表达式匹配

如果ID有固定格式(比如以lr_开头),用正则匹配精准度更高:

list($headers, $content) = explode("\r\n\r\n", $result, 2);
$verificationId = '';
// 匹配lr_开头的ID正则规则
$idPattern = '/lr_[a-zA-Z0-9]+/';

foreach (explode("\r\n", $headers) as $hdr) {
    printf('<p>Header: %s</p>', $hdr);
    if (str_starts_with(strtolower($hdr), 'location:')) {
        $locationUrl = trim(substr($hdr, strlen('location:')));
        if (preg_match($idPattern, $locationUrl, $matches)) {
            $verificationId = $matches[0];
            break;
        }
    }
}

if (!empty($verificationId)) {
    echo '<p>提取到的验证ID:' . $verificationId . '</p>';
}
echo $content;

方法3:URL解析拆分

通过解析URL路径结构,获取最后一段作为ID,适配路径结构可能变化的场景:

list($headers, $content) = explode("\r\n\r\n", $result, 2);
$verificationId = '';

foreach (explode("\r\n", $headers) as $hdr) {
    printf('<p>Header: %s</p>', $hdr);
    if (str_starts_with(strtolower($hdr), 'location:')) {
        $locationUrl = trim(substr($hdr, strlen('location:')));
        $urlParts = parse_url($locationUrl);
        // 拆分路径段
        $pathSegments = explode('/', trim($urlParts['path'], '/'));
        // 取路径最后一段作为ID
        $verificationId = end($pathSegments);
        break;
    }
}

if (!empty($verificationId)) {
    echo '<p>提取到的验证ID:' . $verificationId . '</p>';
}
echo $content;

选型说明

  • 字符串替换:适合前缀固定不变的场景,代码最简洁;
  • 正则匹配:适合ID有明确格式规则的场景,容错性更强;
  • URL解析拆分:适合路径结构可能调整,但ID始终处于路径末尾的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:47:26