多语言 Google 翻译 API 正在返回 (503) 服务器不可用
Posted
技术标签:
【中文标题】多语言 Google 翻译 API 正在返回 (503) 服务器不可用【英文标题】:Multi-language Google Translate API is returing (503) Server Unavailable 【发布时间】:2015-12-11 07:56:17 【问题描述】:我正在尝试使用谷歌翻译进行翻译,但它给出了错误服务器不可用。我的猜测是,当我尝试在地址栏中输入相同的内容时,我们会收到一个验证码来填写。如果我们通过验证码,它只会下载一个 txt 文件。我认为这可能是验证码页面的问题,而不是服务器不可用。
调用函数。
string result = TranslateGoogle("Life is great and one is spoiled when it goes on and on and on", "en", "hi");
Console.WriteLine(result);
翻译谷歌函数
public string TranslateGoogle(string text, string fromCulture, string toCulture)
fromCulture = fromCulture.ToLower();
toCulture = toCulture.ToLower();
string[] tokens = fromCulture.Split('-');
if(tokens.Length > 1)
fromCulture = tokens[0];
tokens = toCulture.Split('-');
if(tokens.Length > 1)
toCulture = tokens[0];
string url = string.Format(@"http://translate.google.com/translate_a/t?client=j&text=0&hl=en&sl=1&tl=2", System.Uri.EscapeDataString(text), fromCulture, toCulture);
string html = null;
try
WebClient web = new WebClient();
web.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0");
web.Headers.Add(HttpRequestHeader.AcceptCharset, "UTF-8");
web.Encoding = Encoding.UTF8;
html = web.DownloadString(url);
catch(Exception ex)
MessageBox.Show(ex.Message);
return null;
string result = Regex.Match(html, "trans\":(\".*?\"),\"", RegexOptions.IgnoreCase).Groups[1].Value;
return result;
预期输出
"sentences":
[
"trans":"जीवन महान है और इस पर और पर और पर चला जाता है जब एक खराब है",
"orig":"Life is great and one is spoiled when it goes on and on and on",
"translit":"Jīvana mahāna hai aura isa para aura para aura para calā jātā hai jaba ēka kharāba hai",
"src_translit":"",
"backend":0
],
"src":"en",
"server_time":85
这就是我得到的。
“远程服务器返回错误:(503) 服务器不可用。”
我应该怎么做才能获得程序的预期输出。
【问题讨论】:
【参考方案1】:我也一直在尝试使用 Google TTS,但它不再起作用了。 Google Translate v2 不再支持 TTS (see here)
由于您使用的是 C#,您最好将语音合成与 System.Speech.Synthesis 一起使用
public static void TextToSpeech (string utterance)
SpeechSynthesizer speaker = new SpeechSynthesizer();
speaker.Speak(utterance);
return;
希望这能回答您的一些问题。目前还没有验证码的解决方法。
【讨论】:
【参考方案2】:对不起,这不是一个答案(但也许社区可以提供帮助,让它成为一个真正的答案),但我需要在这里发帖,因为在评论中我不能很好地格式化。
我尝试了您的示例,似乎 google 认为您正在尝试滥用他们的服务,这是客户端发送的内容:
GET http://translate.google.com/translate_a/t?client=j&text=Life%20is%20great%20and%20one%20is%20spoiled%20when%20it%20goes%20on%20and%20on%20and%20on&hl=en&sl=en&tl=hi HTTP/1.1
Accept-Charset: UTF-8
User-Agent: Mozilla/5.0
Host: translate.google.com
Proxy-Connection: Keep-Alive
Google 将此请求发送至 http://ipv4.google.com/sorry/IndexRedirect?continue=http://translate.google.com/translate_a/t%3Fclient%3Dj%26text%3DLife%2520is%2520great%2520and%2520one%2520is%2520spoiled%2520when%2520it%2520goes%2520on%2520and%2520on%2520and%2520on%26hl%3Den%26sl%3Den%26tl%3Dhi&q=CGMSBFgz6X4YkI3frwUiGQDxp4NLo-2RV2k8i7UPzIRYKSuT5usFkUU
在这里,如果从浏览器导航它会显示验证码,所以我尝试使用 Web 浏览器 (Firefox) 导航程序生成的 url。 这就是它所显示的:
对不起意大利人,它说来自 PC 的流量异常。 一旦您正确提示验证码,您的浏览器就会为下一个请求保存一个 cookie(这样您就不会再次获得验证码),并且您将被重定向到翻译后的句子。
以下是浏览器请求下一次导航的示例:
GET http://translate.google.com/translate_a/t?client=j&text=Life%20is%20great%20and%20one%20is%20spoiled%20when%20it%20goes%20on%20and%20on%20and%20on&hl=en&sl=en&tl=hi HTTP/1.1
Host: translate.google.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: NID=71=a__xJqNU4C1oQTkLrMCSL4CLdR_nelc5kbjcUwgvJUBILn2SOHrfUeIg-9vWfy6tRHVh9Z4yXT1dpwnnHIXf5i2NLlCuDn-joB1tpYo_9JM4_zQnaaYO7UCsFoFILogS8G4XTt1M8esMgUnG_JzoMWSG81Q-JfGk1_IQsb5gIHyHcKroJeNEUp4bnMkiOvZgj1Sk; SID=DQAAAP8AAADnhNjYLtZUYSPbm-V_62WNnlSj8pUKPRnUfLR-Fp18gYeyWsC93YgLn5yoy0L3FLPb2_yNM7ysBQPCnqJGCy6Or6i2WLHicMaVFr0_0LT4xM2KECq3F6Nczc6V7RO8G5VYnHNLXjZ4ZqVMRTfG3E-Ljrgq_0zg_bhi1DT2CeWoBgBFSVTh_cyMjjYdCRiPpyEFRAtUp_48EKmd62YzJHyPeD-JfXTvVlyacDavPzl4L5yf1KmJ37c-j_Px8dYVKHn5tE_jAKHcFjJ717mY85bjyyUasTKoPc_w9AhnVQXE-v-jBsT4rvbJ3khIqiddjagnQ6LpVCMrRwZ9OwU2uubG; HSID=AX4zDBkEvzB-ZdrnV; APISID=ZMLtLIl8PnW6C6X2/A20GPxC9NiRmY3t1T; _ga=GA1.3.1956353841.1435321193; PREF=ID=1111111111111111:FF=0:LD=it:TM=1436338644:LM=1437143045:V=1:S=me455Y_9_LyG2PFU; GOOGLE_ABUSE_EXEMPTION=ID=52cecb7a44e552cc:TM=1442301156:C=c:IP=88.51.233.126-:S=APGng0tXDRxFvrRNJHu-uk3IRqKVpJAIIQ
Connection: keep-alive
如果我将此行添加到 C# 代码中作为证明:
web.Headers.Add(HttpRequestHeader.Cookie, "NID=71=a__xJqNU4C1oQTkLrMCSL4CLdR_nelc5kbjcUwgvJUBILn2SOHrfUeIg-9vWfy6tRHVh9Z4yXT1dpwnnHIXf5i2NLlCuDn-joB1tpYo_9JM4_zQnaaYO7UCsFoFILogS8G4XTt1M8esMgUnG_JzoMWSG81Q-JfGk1_IQsb5gIHyHcKroJeNEUp4bnMkiOvZgj1Sk; SID=DQAAAP8AAADnhNjYLtZUYSPbm-V_62WNnlSj8pUKPRnUfLR-Fp18gYeyWsC93YgLn5yoy0L3FLPb2_yNM7ysBQPCnqJGCy6Or6i2WLHicMaVFr0_0LT4xM2KECq3F6Nczc6V7RO8G5VYnHNLXjZ4ZqVMRTfG3E-Ljrgq_0zg_bhi1DT2CeWoBgBFSVTh_cyMjjYdCRiPpyEFRAtUp_48EKmd62YzJHyPeD-JfXTvVlyacDavPzl4L5yf1KmJ37c-j_Px8dYVKHn5tE_jAKHcFjJ717mY85bjyyUasTKoPc_w9AhnVQXE-v-jBsT4rvbJ3khIqiddjagnQ6LpVCMrRwZ9OwU2uubG; HSID=AX4zDBkEvzB-ZdrnV; APISID=ZMLtLIl8PnW6C6X2/A20GPxC9NiRmY3t1T; _ga=GA1.3.1956353841.1435321193; PREF=ID=1111111111111111:FF=0:LD=it:TM=1436338644:LM=1437143045:V=1:S=me455Y_9_LyG2PFU; GOOGLE_ABUSE_EXEMPTION=ID=52cecb7a44e552cc:TM=1442301156:C=c:IP=88.51.233.126-:S=APGng0tXDRxFvrRNJHu-uk3IRqKVpJAIIQ"); //This is the cookie of the request of Firefox
谷歌发送翻译后的句子"जीवन महान है और इस पर और पर और पर चला जाता है जब एक खराब है"
Here 是一个看起来可以的项目,它基本上是在url中添加不同的参数。
GoogleTranslator 通过直接调用 Google 的翻译 API 来工作 由其在线翻译表单调用并解析结果。
【讨论】:
看来我的问题应该是,如何跳过验证码?很棒的编辑...让我看看我们能做什么 @MohitShrivastava 我用 Google Translate API 调用程序的链接编辑了答案 让我看看。如果可行,我会将其标记为答案 这没有按预期工作。但我非常感谢您的帮助。以上是关于多语言 Google 翻译 API 正在返回 (503) 服务器不可用的主要内容,如果未能解决你的问题,请参考以下文章
国际化多语言方案i18n / class google sheets v4 api 在线文档同步json
国际化多语言方案i18n / class google sheets v4 api 在线文档同步json
JavaScript 使用Google API使Web应用程序成为多语言......对PHP,Dotnet和其他语言开发人员有用