сохранение изображения из проблемы с URL - PullRequest
1 голос
/ 28 сентября 2011

Я пытаюсь загрузить изображение с URL: http://appworld.blackberry.com/webstore/servedimages/340582.png?t=2

Я использую HttpWebRequest webRespose Stream BinaryReader FileStream BinaryWriter

это работает для других веб-сайтов и изображений, но URL, который я дал выше, дает мне пустой 0-байтовый файл ..

, что означает, что я не могу сохранить изображение с этого URL.

Кто-нибудь может мне помочь?

Ответы [ 3 ]

6 голосов
/ 28 сентября 2011

Я использую HttpWebRequest webRespose Stream BinaryReader FileStream BinaryWriter

Зачем использовать 6 разных классов, если вы можете сделать то же самое только с одним?

string sourceUrl = "http://appworld.blackberry.com/webstore/servedimages/340582.png?t=2";
string localPath = @"C:\foo\bar\340582.png";
using (WebClient wc = new WebClient())
{
    wc.DownloadFile(sourceUrl, localPath);
}

Если вам нужно загрузить изображение с этого URL, вы можете сделать это (я предполагаю, что вы используете WinForms / GDI):

string sourceUrl = "http://appworld.blackberry.com/webstore/servedimages/340582.png?t=2";
string localPath = @"C:\foo\bar\340582.png";
Image image;
using (WebClient wc = new WebClient())
using (Stream stream = wc.OpenRead(sourceUrl))
{
    image = Image.FromStream(stream);
}
1 голос
/ 28 сентября 2011

Я только что проверил это, и это загрузило и сохранило изображение для меня.Вам, вероятно, понадобится проверить типы MIME и все это где-нибудь вдоль дороги.

string url = "http://appworld.blackberry.com/webstore/servedimages/340582.png?t=2";

using (System.Drawing.Image img = System.Drawing.Image.FromStream(WebRequest.Create(url).GetResponse().GetResponseStream())) {
    img.Save("new.jpg");
}
1 голос
/ 28 сентября 2011

Интересно, вы слишком часто заходили на их сайт, и теперь они блокируют вас за злоупотребления ...

Скорее всего, они проверяют отправленные заголовки и не позволяют ботам захватить их интеллектуальную собственность.

На ум приходят два возможных решения:

  1. Измените код запроса, чтобы передать правдоподобные заголовки браузера.
  2. Позвоните на blackberry.com и получите разрешение на повторное использование их файлов.

Вероятно, вы должны сделать оба.

Суть в том, что я сомневаюсь, что это проблема с кодом и, скорее всего, нарушение их условий обслуживания.


и ради интереса:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);
// Setting the useragent seems to resolve certain issues that *may* crop up. 
httpRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...