ProtocolError при вызове HttpWebRequest.GetResponse () - PullRequest
4 голосов
/ 19 сентября 2011

У меня есть страница, содержащая ссылки на некоторые файлы.

Мне нужно получить доступ к источнику страницы для его анализа и получения всех гиперссылок на файлы.

Мой код примерно такой (какой-то фрагмент кода, который я нашел во многих местах в сети ..):

    "private static byte[] ReadImageFromUrl(string url)
    {
        var myReq = (HttpWebRequest)WebRequest.Create(url);

        myReq.Timeout = 10000;

        WebResponse myResp = myReq.GetResponse();

        Stream stream = myResp.GetResponseStream();

        List<byte> bytesList = new List<byte>();

        using (var br = new BinaryReader(stream))
        {
            try
            {
                while (true)
                {
                    var b = br.ReadByte();
                    bytesList.Add(b);
                }
            }
            catch (Exception)
            {}

            br.Close();
        }

        myResp.Close();

        return bytesList.ToArray();
    }"

Теперь проблема в том, что я получаю "System.Net.WebException: удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера. "при вызове «myReq.GetResponse ()» - изучая ошибку, я вижу, что статус «ProtocolError».

Свойство response объекта WebException содержит некоторую ошибку сервера .. (хотя при открытии его из браузера оно открывается правильно) ... также, когда я вызываю эту функцию с URL-адресом одного из моих файлов, я получаютот же статус ProtocolError, но ошибка 404 ...

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

Спасибо!

Ответы [ 2 ]

4 голосов
/ 11 июля 2012

Мой новый код после использования Fiddler:

private static byte[] ReadFileFromUrl(string url)
{
    var myReq = (HttpWebRequest)WebRequest.Create(url);
    myReq.Accept = const_AcceptHeader;                
    myReq.Headers.Set(const_AcceptLanguageHeaderName, const_AcceptLanguageHeader);
    myReq.UserAgent = const_AcceptUserAgentHeader;
    myReq.CookieContainer = new CookieContainer();               
    myReq.KeepAlive = true;
    myReq.Timeout = Int32.Parse(ConfigSettings.RequestPageTimeout) * 1000;
    WebResponse myResp = null;
    List<byte> bytesList = null;
    myResp = myReq.GetResponse();
    Stream stream = myResp.GetResponseStream();
    bytesList = new List<byte>();
    using (var br = new BinaryReader(stream))
    {
        try
        {
            while (true)
            {
                var b = br.ReadByte();
                bytesList.Add(b);
            }
        }
        catch (Exception ex)
        {
            throw;
        }

        br.Close();
    }                

    return bytesList.ToArray();
}

Все переменные, которые начинаются с const_ , взяты из Fiddler.

2 голосов
/ 20 сентября 2011

Ну, я решил, что с помощью Fiddler ... Я передал объекту запроса заголовки, как я их видел в Fiddler ... и это сработало, без ошибок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...