问题描述
我想覆盖网页中各个请求的 cookie 标头。为此,我目前正在使用 PuppeteerSharp 和 Chrome Devtools 协议 Fetch API(具体来说,我正在使用 Fetch.enable
、Fetch.requestPaused
和 Fetch.continueRequest
)。
请注意,我不想使用 Network.setCookie,因为我想绕过浏览器对 cookie 存在的了解。 (换句话说,我不希望 cookie 显示在 Chrome DevTools -> Applications -> Cookies 选项卡中)。
我观察到这是间歇性的。 我怎样才能让这个 cookie 覆盖不是间歇性的,而是适用于所有请求?
这是 PuppeteerSharp 代码:
(重要部分见SET THE COOKIE HEADER OVERRIDE
注释)
class Program
{
public static CDPSession _cdpSession;
public static void CdpSessionMessageReceived(object sender,MessageEventArgs args)
{
if (args.MessageID == "Fetch.requestPaused")
{
Task.Run(async () =>
{
FetchRequestPausedResponse fetchRequest = args.MessageData.ToObject<FetchRequestPausedResponse>();
List<Dictionary<string,object>> headers = new List<Dictionary<string,object>>();
headers.Add(new Dictionary<string,object>
{
{ "name","cookie" },{ "value","abcdefg=1234567" } // SET THE COOKIE HEADER OVERRIDE FOR EVERY REQUEST
});
await _cdpSession.SendAsync("Fetch.continueRequest",new Dictionary<string,object>
{
{ "requestId",fetchRequest.RequestId },{ "headers",headers.ToArray() }
}
);
});
}
}
static void Main(string[] args)
{
browser b = await Puppeteer.LaunchAsync(new LaunchOptions()
{
ExecutablePath = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",defaultviewport = null,Headless = false
});
Page page = b.PagesAsync()[0];
JObject response = await _cdpSession.SendAsync("Fetch.enable",object>
{
{
"patterns",object>[]
{
new Dictionary<string,object>
{
{ "urlPattern","*" },// URL PATTERN IS * TO INTERCEPT EVERY REQUEST
{ "requestStage","Request" }
}
}
}
});
_cdpSession.MessageReceived += CdpSessionMessageReceived;
await page.GoToAsync("https://www.google.com");
await b.CloseAsync();
}
internal class FetchRequestPausedResponse
{
public string RequestId { get; set; }
public string NetworkId { get; set; }
}
}
如果我查看 Chrome DevTools 网络选项卡,我会看到 21 个请求中只有 3 个具有 abcdefg=1234567
cookie 覆盖。这是一个没有请求的示例:
更新:在进行更多研究时,chrome.webRequest onBeforeSendHeaders
确实可以完成我正在寻找的内容,即覆盖单个请求的 cookie 标头而不告诉浏览器 cookie 是什么是。 Here 是删除 cookie 标头的代码示例(我找不到以上面的 Puppeteer 代码片段的方式替换 cookie 标头的示例)。
现在来了解 PuppeteerSharp 如何完成 onBeforeSendHeaders
所做的......
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)