下载图像时维基百科用户代理问题

Wikipedia user agent problem when downloading images

我正在尝试使用 c# .net 控制台应用程序从维基百科下载大约 250 张图像。 下载 3 后出现此错误。

System.Net.WebException: 'The remote server returned an error: (403) Forbidden. Please comply with the User-Agent policy: https://meta.wikimedia.org/wiki/User-Agent_policy. '

我已经阅读了他们的 User-Agent_policy 页面并添加了一个符合他们所说的用户代理。 (尽我所能,我不是网络开发人员)

他们说,让它具有描述性,如果它是机器人,则包括 bot 这个词,在括号中包括联系方式,所有这些我都做过。

我也在每张图片之间等待 5 秒..我真的真的不想在我的浏览器中手动下载它们。

    static void DownloadImages()
    {
        var files = Directory.GetFiles(@"C:\projects\CarnivoraData", "*", SearchOption.AllDirectories);
        var client = new WebClient();
        client.Headers.Add("User-Agent", "bot by <My Name> (<My email address>) I am downloading an image of each carnivoran once (less than 300 images) for educational purposes");

        foreach (var path in files)
        {
            //Console.WriteLine(path);
            //Console.WriteLine(File.ReadAllText(path));

            AnimalData data = JsonSerializer.Deserialize<AnimalData>(File.ReadAllText(path));
            client.DownloadFile("https:" + data.Imageurl,@"C:\projects\CarnivoraImages\"+ data.Name +Path.GetExtension(data.Imageurl));
            System.Threading.Thread.Sleep(5000);
        }
    }

有什么建议吗?

好的,我让它工作了。我认为他们的关键是使用 httpclient 而不是 webclient 下载文件,并使用 DefaultRequestHeaders.UserAgent.ParseAdd

    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("<My Name>/1.0 (<My Email>) bot");

我什至没有在图片之间等待,大约一分钟就下载了它们。

还有一个好处,这里是如何使用 httpclient 下载文件(它比 webclient 更混乱!)

    static async Task GetFile(HttpClient httpClient,string filepath, string url)
    {
        using (var stream = await httpClient.GetStreamAsync(new Uri(url)))
        {
            using (var fileStream = new FileStream(filepath, FileMode.CreateNew))
            {
                await stream.CopyToAsync(fileStream);
            }
        }
    }