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

如何通过PHP获取Google验证码图片内容并转为base64格式

PHP cURL获取Google拦截页验证码图片转base64实现

核心前提:请求验证码图片必须复用触发拦截时的cURL会话与对应Cookie,否则会获取到无效的错误图片资源

实现步骤

  • 检测返回的HTML内容是否为验证码拦截页,通过正则匹配验证码图片标签的src属性
  • 对匹配到的src路径做HTML实体解码,补全域名前缀得到完整的验证码图片请求地址
  • 复用原有cURL句柄(保留会话Cookie、UA等原有请求配置)请求验证码图片的二进制内容
  • 校验图片请求成功后,将二进制内容编码为base64,拼接对应data URI头即可直接用于前端展示

完整代码示例

// 假设 $response 是触发验证码拦截时拿到的HTML响应内容
// 假设 $ch 是发起原Google搜索请求使用的cURL句柄(已配置Cookie、UA等参数)
if (preg_match('/<img[^>]+src="(\/sorry\/image[^"]+)"/i', $response, $matches)) {
    // 解码HTML转义字符,处理路径中被转义的&amp;等实体
    $imgRelativePath = html_entity_decode($matches[1]);
    // 拼接对应Google域名,示例中为土耳其域名google.com.tr,根据实际请求域名替换
    $captchaImgFullUrl = "https://www.google.com.tr" . $imgRelativePath;

    // 复用原有cURL配置请求图片
    curl_setopt($ch, CURLOPT_URL, $captchaImgFullUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $imgContent = curl_exec($ch);
    $requestInfo = curl_getinfo($ch);

    // 校验请求状态,生成可用的base64图片
    if ($requestInfo['http_code'] === 200 && $imgContent) {
        $captchaBase64 = sprintf(
            'data:%s;base64,%s',
            $requestInfo['content_type'],
            base64_encode($imgContent)
        );
        // $captchaBase64 可直接赋值给<img>标签的src属性展示验证码
    }
}

注意事项

  • 禁止新建独立cURL资源请求验证码图片,Google的验证码资源与会话Cookie强绑定,新会话无法获取对应验证码图
  • 不要硬编码验证码图片的URL参数,所有参数以拦截页HTML中输出的src路径为准,参数会动态生成,硬编码会直接失效
  • 后续提交验证码校验请求时,同样需要复用该cURL句柄,保持Cookie一致,否则验证码校验会失败
  • 若请求时使用了代理、特定UA头,请求图片时也要保留相同配置,避免触发额外拦截

内容的提问来源于stack exchange,提问作者Akın Evrenkaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:45:58