我有一个旧但有效的应用程序,可以从 url 生成 pdf。我正在尝试修改它以便能够发送帖子请求。
PuppeteerSharp 包已升级至版本 14.1.0。相关代码如下:
await new BrowserFetcher().DownloadAsync();
var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
IgnoreHTTPSErrors = true
});
var page = await browser.NewPageAsync();
try
{
await page.GoToAsync(url, new NavigationOptions
{
WaitUntil = new[] {
WaitUntilNavigation.Networkidle2
}
});
await page.PdfAsync(Path.Combine(pdfDirPath, filename), new PdfOptions
{
Format = PaperFormat.A4,
PrintBackground = true
});
}
catch (Exception e)
{
errorMsg.Add($"Error generating pdf: {e.Message}");
}
await browser.CloseAsync();
我想它来自这个例子。
提供 pdf 文件的 Web 服务器具有可通过发布请求进行设置的自定义选项。基于这个问题我修改了上面的代码,添加了post请求(星号之间添加了部分):
await new BrowserFetcher().DownloadAsync();
var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
IgnoreHTTPSErrors = true
});
var page = await browser.NewPageAsync();
try
{
// *****************************
await page.SetRequestInterceptionAsync(true);
page.Request += async (sender, e) =>
{
var data = new Payload()
{
Url = url,
Method = System.Net.Http.HttpMethod.Post,
PostData = "test"
};
await e.Request.ContinueAsync(data);
};
// ***************************
await page.GoToAsync(url, new NavigationOptions
{
WaitUntil = new[] {
WaitUntilNavigation.Networkidle2
}
});
await page.PdfAsync(Path.Combine(pdfDirPath, filename), new PdfOptions
{
Format = PaperFormat.A4,
PrintBackground = true
});
}
catch (Exception e)
{
errorMsg.Add($"Error generating pdf: {e.Message}");
}
await browser.CloseAsync();
现在,当我使用此代码时,我得到一个空白 pdf 文件,其中仅包含文本“Cannot POST /”,并且不知道该怎么办。
网络服务器似乎不接受 POST 请求。我的错。