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

Playwright:APIRequestContext设置Host header异常致Gmail API请求404

解决Playwright APIRequestContext调用Gmail API返回404的问题

核心问题是URL拼接错误,导致请求发送到了不存在的API端点,和Host头无关。

问题原因

你的baseURL设置为"https://gmail.googleapis.com/gmail/v1/users",而发送GET请求时用了以/开头的路径"/{USER_EMAIL}/messages/"。Playwright的APIRequestContext规则是:如果请求路径以/开头,会忽略baseURL中的路径部分,直接拼接域名和请求路径。最终实际请求的URL是:

https://gmail.googleapis.com/{USER_EMAIL}/messages/

这显然不是Gmail API的正确端点,所以返回404错误。

另外,手动设置Host头完全没必要——Playwright会根据请求的URL自动生成正确的Host头,手动设置反而可能引发异常,建议直接去掉。

修复方案

有两种方式可以修正URL拼接:

方案1:修改请求路径,去掉开头的/

保持baseURL不变,将请求路径改为不带开头/的格式,这样会和baseURL的路径部分正确拼接:

import { APIRequestContext, expect, test } from "@playwright/test";

let apiContextGmailInbox: APIRequestContext;

apiContextGmailInbox = await playwright.request.newContext({
    baseURL: "https://gmail.googleapis.com/gmail/v1/users"
});

test("test get last email body via API", async ({page}) => {
    const mailContext = await apiContextGmailInbox.get(
                                     "{USER_EMAIL}/messages/" 
    );
    expect(mailContext.status()).toBe(401);
});

方案2:调整baseURL为域名,请求路径用完整路径

将baseURL简化为域名,请求路径使用完整的API路径:

import { APIRequestContext, expect, test } from "@playwright/test";

let apiContextGmailInbox: APIRequestContext;

apiContextGmailInbox = await playwright.request.newContext({
    baseURL: "https://gmail.googleapis.com"
});

test("test get last email body via API", async ({page}) => {
    const mailContext = await apiContextGmailInbox.get(
                                     "/gmail/v1/users/{USER_EMAIL}/messages/"
    );
    expect(mailContext.status()).toBe(401);
});

效果验证

修改后,请求会发送到正确的Gmail API端点https://gmail.googleapis.com/gmail/v1/users/{USER_EMAIL}/messages/,此时因为缺少授权Token,会返回预期的401错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:35:41