【发布时间】:2021-10-15 16:13:59
【问题描述】:
我正在尝试使用以下代码使用 C# 下载文件:
using (var client = new WebClient())
{
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
string downloadUrl = "https://data.3dbag.nl/cityjson/v21031_7425c21b/3dbag_v21031_7425c21b_8044.json";
string destinationFile = "test.json";
client.DownloadFile(downloadUrl, destinationFile);
}
一个示例网址是这样的:https://data.3dbag.nl/cityjson/v21031_7425c21b/3dbag_v21031_7425c21b_8044.json
此 URL 在我的浏览器中有效,但在 C# 中我收到 (404) Not Found 错误。有谁知道如何解决这个问题?
【问题讨论】:
-
请edit您的问题包含minimal reproducible example。
-
猜测:服务器需要一个 User-Agent 标头。无论如何,有一个简单的解决方案:使用 Telerik 的 Fiddler 之类的工具来比较浏览器发出的原始请求和 C# 发出的原始请求。
-
我很快就玩弄了“邮递员”,并注意到标头字段“Accept-Encoding”的值为“gzip”是必需的。 --> client.Headers.Add("Accept-Encoding", "gzip");
-
现在在浏览器中按 F12。然后点击链接。然后查看右侧的“网络”选项卡中的“标题”->“请求标题”(将来可能会使用 cookie,尤其是在您登录后它是可用的资源时)。该“请求标头”列表是您的浏览器发送的使服务器成功响应的内容列表,即“有效的”,因此首先复制它。使用 Insomnia 之类的程序发出相同的请求,然后删除标头之一直到它停止,把它放回去并继续删除 otehrs 以达到最低限度(如果你在乎的话)
标签: c# json http-status-code-404 webclient