【问题标题】:Using google translate api POST method, returns 404使用谷歌翻译 api POST 方法,返回 404
【发布时间】:2011-08-22 19:25:32
【问题描述】:

所以基本上我有一些法语文本,想用 c# 用英语翻译它。

我正在使用谷歌翻译 api,在我的 text.length > 1000 之前它工作正常......然后我意识到我必须使用 POST 方法。

由于我使用 post 方法,它返回 404。

顺便说一句,我知道该 api 已被弃用,尽管无论如何它会很酷,但我开始意识到也许我应该使用 bing ?

 string fromLanguage = "fr";
 string toLanguage = "en";
 String apiKey = "AIzasdfasdfJvWKNioZwLg-3kyYsm4_dao";
 String apiUrl = "https://www.googleapis.com/language/translate/v2";
 string tmpTranslatedContent = Translate(apiUrl, "salut la planete", apiKey, fromLanguage, toLanguage);


public string Translate(string url, string text, string key, string fromLanguage, string toLanguage)
        {
            PostSubmitter post = new PostSubmitter();
            post.Url = url;
            post.PostItems.Add("key", key);
            post.PostItems.Add("source", fromLanguage);
            post.PostItems.Add("target", toLanguage);
            post.PostItems.Add("q", text);
            post.Type = PostSubmitter.PostTypeEnum.Post;
            string result = post.Post();
            return result;
       }

PostSubmitter is a classgoogle 搜到的

网站上的评论说它有效.....

类的主要部分是这样的

HttpWebRequest request=null;
if (m_type==PostTypeEnum.Post)
{
Uri uri = new Uri(url);
request = (HttpWebRequest) WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
using(Stream writeStream = request.GetRequestStream())
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = encoding.GetBytes(postData);
writeStream.Write(bytes, 0, bytes.Length);
}

谢谢。

【问题讨论】:

  • 从我的消息顶部删除 yo 是怎么回事?这里只是在进行某种虚假的严肃谈话
  • 工作正常,我一开始也试过自己做,有同样的 404 问题。看起来它是 https 和 post 方法的问题......
  • “salut la planete”:“问候地球”?另外,meta.stackexchange.com/questions/2950/…
  • 您的实际问题是什么?您是否应该使用 bing 还是这里有编程问题?

标签: c# google-translate


【解决方案1】:

这有点老了,但我刚刚遇到了类似的问题,但使用 PHP 而不是 C#,修复应该非常相似。

基本上,即使您使用的是 POST,您仍然需要告诉 Google,从 REST 的角度来看,您实际上是在执行 GET。这可以通过 X-HTTP-Method-Override 标头来完成,将其设置为:X-HTTP-Method-Override: GET

Google 告诉我,作为 ASP.NET MVC 第 2 版,有一个方法 HttpHelper.HttpMethodOverride 可以让您执行此操作。

然而,根据 Google Translate API,即使在发布时,文本仍被限制为 5k。

【讨论】:

  • 我最终使用了 get 和循环,将文本分成 1k 的小块。是的,我知道……但它对我有用,而且看起来很稳定。
猜你喜欢
  • 2015-04-04
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 2011-12-26
  • 2010-10-10
  • 1970-01-01
相关资源
最近更新 更多