Я пытаюсь загрузить файл с веб-сервера с URL-адресом запроса, который содержит параметр с кириллическими символами.Но я не могу заставить это работать в c #, даже если я URL-кодирую параметр.
Когда я открываю страницу в IE с http://translate.google.com/translate_tts?tl=ru&q=ЗДРАВСТВУЙТЕ, сервер не отвечает.
При использовании версии в кодировке URL http://translate.google.com/translate_tts?tl=ru&q=%d0%97%d0%94%d0%a0%d0%90%d0%92%d0%a1%d0%a2%d0%92%d0%a3%d0%99%d0%a2%d0%95 сервер отвечает ожидаемым образом.
Теперь моя проблема: Я хочу загрузить MP3 из C # ...
var url = string.Format("http://translate.google.com/translate_tts?tl=ru&q={0}", Server.UrlEncode("ЗДРАВСТВУЙТЕ")); System.Net.WebClient client = new WebClient(); var res = client.DownloadData(url);
И это НЕ работает с кириллическими символами.Я всегда получаю ответ с нулевым байтом, как первый не закодированный запрос.Когда я отправляю "нормальные" символы, приведенный выше код работает нормально.
Итак ... я делаю что-то не так.Есть намеки?Tipps?Решения?
Спасибо Михаил
Вы должны установить user-agent для WebClient - это работает:
WebClient
string url = "http://translate.google.com/translate_tts?tl=ru&q=ЗДРАВСТВУЙТЕ"; WebClient client = new WebClient(); client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); var res = client.DownloadData(url);
Из документации msdn :
Экземпляр WebClient не отправляет необязательные заголовки HTTP по умолчанию. Если Ваш запрос требует дополнительного заголовок, вы должны добавить заголовок к Коллекция заголовков. Например, чтобы сохраняя запросы в ответе, вы должен добавить заголовок агента пользователя. Также, серверы могут вернуть 500 (внутренний Ошибка сервера) если заголовок пользовательского агента отсутствует.
Попробуйте добавить
client.Encoding = System.Text.Encoding.UTF8;
Я не использую заголовок user-agent, но для меня это работает:
WebClient client = new WebClient(); client.Encoding = System.Text.Encoding.UTF8; string response = client.DownloadString(_url);