调用google翻译api出现URL超长的问题???

ndscwsy 2010-06-02 11:32:40

/// <summary>
/// 使用WebRequest获取Google翻译后的内容
/// </summary>
/// <param name="strTranslateString">需要翻译的内容</param>
/// <param name="strRequestLanguage">原文语种</param>
/// <param name="strResultLanguage">译文语种</param>
/// <returns></returns>
private string GetGoogleTranslateJSONString(string strTranslateString,string strRequestLanguage, string strResultLanguage)
{
string url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=";
WebRequest request = HttpWebRequest.Create(url + strTranslateString + "&langpair=" + strRequestLanguage + "%7C" + strResultLanguage);
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//这句出错
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}

这是我摘抄的一段代码,strTranslateString这个是待翻译内容,但是这个字段过长的话,服务器会报414错误,也就是说URL过长,请问各位兄弟怎么解决的,我现在做一个小程序,需要把数据库里字段翻译成中文,但是这个字段太长,以上这个方法翻译短的没问题,谢谢各位了,救急啊。
...全文
902 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
南平 2012-12-17
  • 打赏
  • 举报
回复
可以 用 post 请求
清山博客 2011-09-03
  • 打赏
  • 举报
回复
参考这里:http://blog.csdn.net/a497785609/article/details/6666994
dingli321 2010-06-03
  • 打赏
  • 举报
回复
google限制了上传字符长度,需在5000字符以内
ndscwsy 2010-06-02
  • 打赏
  • 举报
回复
求助啊,顶一下自己
ndscwsy 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 computerfox 的回复:]
你试试看在网页中用google翻译时,如果输入字符很长,没有报错的情况下,google是不是在url上做了处理?加入了什么其他的关键字?
[/Quote]
和关键字没有关系,是不是和提交方式有关系,get不行,要用POST
ndscwsy 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liuqian4243 的回复:]
太长了,改变提交方式,或分隔后多次提交
[/Quote]
很久不写代码了,那改成那种提交方式,分隔肯定不行,会影响翻译效果
捷哥1999 2010-06-02
  • 打赏
  • 举报
回复
你试试看在网页中用google翻译时,如果输入字符很长,没有报错的情况下,google是不是在url上做了处理?加入了什么其他的关键字?
Ny-6000 2010-06-02
  • 打赏
  • 举报
回复
太长了,改变提交方式,或分隔后多次提交
ndscwsy 2010-06-02
  • 打赏
  • 举报
回复
上面的代码返回了一个错误的JSON,错误时字符长长度超长,看来只能换一种方法了,大家看看我这种方法写的如何,但是取不到翻译内容

// <summary>
/// 翻译
/// </summary>
/// <param name="texts">需要翻译的内容</param>
/// <param name="languages">翻译语种</param>
/// <returns></returns>
private string china_to_english(string texts, string languages)
{
string payload = "hl=zh-CN&ie=UTF8&text=" +texts+ "&langpair=" +languages;
string s = "http://translate.google.com/translate_t" + payload;
string str_return = string.Empty;
WebRequest req = WebRequest.Create("http://translate.google.com/translate_t");
req.Credentials = CredentialCache.DefaultCredentials;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.Timeout = 10000;
req.ContentLength = payload.Length;
Encoding encoding = Encoding.GetEncoding("UTF-8");
Byte[] bytes = encoding.GetBytes(payload);
req.ContentLength = bytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
if (res.StatusDescription == "ok")
{
Console.WriteLine("暂时无法连接到网站");
Console.ReadKey();
}
Stream dataStream = res.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
str_return = responseFromServer;
reader.Close();
dataStream.Close();
res.Close();

//str_return.Replace("?i:(.+)(\<div)(.+)(\>)(.+)(\<\/div\>)(.+))","$5");
str_return = GetStrFiltrateYH(str_return);
str_return.Substring(3);
return str_return;
}
ndscwsy 2010-06-02
  • 打赏
  • 举报
回复

string payload ="v=1.0&q=" + strTranslateString + "&langpair=" + strRequestLanguage + "%7C" + strResultLanguage;
string str_return = string.Empty;
WebRequest req = WebRequest.Create("http://ajax.googleapis.com/ajax/services/language/translate?");
req.Credentials = CredentialCache.DefaultCredentials;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.Timeout = 10000;
req.ContentLength = payload.Length;
Encoding encoding = Encoding.GetEncoding("UTF-8");
Byte[] bytes = encoding.GetBytes(payload);
req.ContentLength = bytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
if (res.StatusDescription == "ok")
{
Console.WriteLine("暂时无法连接到网站");
Console.ReadKey();
}
Stream dataStream = res.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
str_return = responseFromServer;
reader.Close();
dataStream.Close();
res.Close();

return str_return;

我已经改成POST方式了,但是长的翻译内容还是返回不对的JSON,奇怪啊
kimmking 2010-06-02
  • 打赏
  • 举报
回复
ie中规定的url长度不得超过2083

超长还是post吧
wuyq11 2010-06-02
  • 打赏
  • 举报
回复
HttpWebRequest 通过post传值
byte[] data = encoding.GetBytes("");
HttpWebRequest myRequest =(HttpWebRequest)WebRequest.Create("");
myRequest.Method = "POST";
myRequest.ContentType="application/x-www-form-urlencoded";

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧