【发布时间】:2016-10-16 07:53:25
【问题描述】:
我写了一个小的 Windows 窗体程序,它向谷歌翻译发送一个字符串。目标框架是.Net 4.5.2
public string TranslateText(string input, string languagePair)
{
try
{
string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
WebClient webClient = new WebClient();
webClient.Encoding = System.Text.Encoding.UTF8;
string result = webClient.DownloadString(url);
result = result.Substring(result.IndexOf("<span title=\"") + "<span title=\"".Length);
result = result.Substring(result.IndexOf(">") + 1);
result = result.Substring(0, result.IndexOf("</span>"));
return result.Trim();
}
catch (WebException wex)
{
var err = "";
using (var sr = new StreamReader(wex.Response.GetResponseStream()))
err= sr.ReadToEnd();
saveLog(err);
return "FEHLER";
}
}
所以我的问题是,在我的机器上代码可以正常工作。但是在我客户的计算机上,总是出现 System.Net.WebException。 “远程服务器返回错误:(503) 服务器不可用”。 这是完整的错误:
System.Net.WebException: The remote server returner an error: (503) Server Unavailable.
at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
at System.Net.WebClient.DownloadString(Uri address)
at WindowsFormsApplication1.Form1.TranslateText(String input, String languagePair)
我不知道,我应该怎么做。我试图停用防病毒软件和防火墙。我还尝试将 url 字符串复制到浏览器,并输入一些有效的输入 (http://www.google.com/translate_t?hl=en&ie=UTF8&text=test&langpair=de|en)
还有什么我可以尝试的吗? 感谢您的时间和答案! 最好的祝福, 多米尼克
编辑: 问题解决了。首先我将网址更改为https://translate.google.com/?hl=en&;ie=UTF8&text={0}&langpair={1},然后我收到了验证码问题。我通过在网址末尾添加“&client=”解决了这个问题: translate.google.com/?hl=en&;ie=UTF8&text={0}&langpair={1}&client=
【问题讨论】:
-
http不被 Google 接受。改成https:string url = String.Format("https://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair); -
@sakura 我不相信这是问题所在,因为上面的代码在我机器上的 LinqPad 中运行良好。或者可能是因为我可能会收到 301 重定向到 https。也许这可能是一个问题
-
您的代码不是好方法。你可以使用this code 更好。使用示例:
https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=de&dt=t&q=my+name+is+Sakura -
感谢您的帮助和代码。目前,Jordan Coulam 的回答一切正常。但是当我遇到新问题时,我一定会使用你的代码。谢谢大家!
标签: c# webclient google-translate system.net.webexception