我正在尝试从Web服务器加载一个文件,其中包含一个包含带有西里尔字符的参数的请求URL。 但即使我对URL进行编码,我也不会在c#中使用它。
当我用IE打开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
服务器按预期响应。
现在我的问题:
我想从C#下载MP3 ...
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);
这不适用于西里尔字母。我总是得到一个零字节的答案,就像第一个非编码请求一样。 当我发送“普通”字符时,上面的代码工作正常。
所以......我做错了什么。 任何提示?的窍门?溶液
感谢
迈克尔
答案 0 :(得分:3)
您必须为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);
WebClient实例不发送 默认情况下可选的HTTP标头。如果 您的请求需要可选 标题,您必须添加标题 标题集合。例如,到 在你的回复中保留查询 必须添加用户代理标头。也, 服务器可能返回500(内部 服务器错误)如果是用户代理标头 不见了。
答案 1 :(得分:0)
尝试添加
client.Encoding = System.Text.Encoding.UTF8;
我不使用用户代理标题,但对我来说它有效:
WebClient client = new WebClient();
client.Encoding = System.Text.Encoding.UTF8;
string response = client.DownloadString(_url);