Web ページの個々のリクエストの Cookie ヘッダーをオーバーライドしたいと考えています。これを行うために、私は現在PuppeteerSharpと Chrome Devtools Protocol 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",
new Dictionary<string, object>
{
{
"patterns", new Dictionary<string, 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 の [Network] タブを見ると、21 件のリクエストのうち 3 件だけがabcdefg=1234567
Cookie オーバーライドを持っていることがわかります。以下は、そうでないリクエストの例です。
更新: さらに調査を行うと、chrome.webRequest onBeforeSendHeaders
は、私が探しているものを正確に達成するために機能します。これは、ブラウザーに Cookie が何であるかを伝えずに、個々の要求の Cookie ヘッダーをオーバーライドすることです。これは、Cookie ヘッダーが削除されるコード例です (上記の Puppeteer コード スニペットのように Cookie ヘッダーが置き換えられる例は見つかりませんでした)。
ここで、PuppeteerSharp がどのように機能するかを理解する必要onBeforeSendHeaders
があります....