使用google translate api POST方法,返回404

时间:2011-08-22 19:25:33

标签: c# google-translate

所以基本上我有一些法语文本,想用英语用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 class

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

该课程的主要部分如下所示

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);
}

感谢。

1 个答案:

答案 0 :(得分:2)

这有点旧,但我遇到了类似的问题,但使用PHP代替C#,修复应该非常相似。

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

Google告诉我,作为ASP.NET MVC版本2,有一个方法HttpHelper.HttpMethodOverride可以让你这样做。

根据谷歌翻译API,即使发帖,文字仍然限制在5k。