Чтение удаленного файла [C #]

2

Я пытаюсь прочитать удаленный файл с использованием HttpWebRequest в приложении консоли С#. Но по какой-то причине запрос пуст - он никогда не находит URL-адрес.

Это мой код:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://uo.neverlandsreborn.org:8000/botticus/status.ecl");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Почему это невозможно?

Файл содержит только строку. Ничего больше!

  • 1
    Последний онлайн ... да!
Теги:

2 ответа

12
Лучший ответ

Как вы читаете данные ответа? Возвращается ли он как успешный, но пустой, или есть ли статус ошибки?

Если это не поможет, попробуйте Wireshark, что позволит вам увидеть, что происходит на сетевом уровне.

Кроме того, рассмотрите возможность использования WebClient вместо WebRequest - это делает его невероятно легким, когда вам не нужно ничего делать изощренный:

string url = "http://uo.neverlandsreborn.org:8000/botticus/status.ecl";
WebClient wc = new WebClient();
string data = wc.DownloadString(url);
  • 0
    ... +1 за знакомство с новым классом.
  • 0
    Хм, почему-то сервер возвращает ошибку протокола. Это странно! То же самое касается ответа Мэтьюса.
Показать ещё 5 комментариев
3

Вы должны получить поток ответов и прочитать данные из этого. Здесь функция, которую я написал для одного проекта, который делает именно это:

    private static string GetUrl(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            if (response.StatusCode != HttpStatusCode.OK)
                throw new ServerException("Server returned an error code (" + ((int)response.StatusCode).ToString() +
                    ") while trying to retrieve a new key: " + response.StatusDescription);

            using (var sr = new StreamReader(response.GetResponseStream()))
            {
                return sr.ReadToEnd();
            }
        }
    }
  • 2
    Вы также должны поместить ответ в оператор использования. (Я бы также постарался не объявлять переменные до момента первого использования по общему принципу.)
  • 0
    +1 на два счета ... Разделение определений было историческим артефактом, начиная с того момента, когда я реорганизовал его в отдельную функцию после того, как понял, что копировал / вставлял этот код в нескольких местах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню