Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Microsoft Translator API回答500个内部服务器错误_Ruby On Rails_Xml_Api_Rest - Fatal编程技术网

Ruby on rails Microsoft Translator API回答500个内部服务器错误

Ruby on rails Microsoft Translator API回答500个内部服务器错误,ruby-on-rails,xml,api,rest,Ruby On Rails,Xml,Api,Rest,我正在尝试在我的Rails应用程序中使用Microsoft的Translator API。不幸的是,大多数情况下都是意外的,服务器总是会回答一个内部服务器错误。我还用Poster[1]手动尝试了它,得到了相同的结果 更详细地说,我在做什么?我正在创建一个进入请求主体的XML字符串。我使用了C#的例子。好吧,然后我只是调用rest服务。 我的代码如下所示: xmlns1=”http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Servic

我正在尝试在我的Rails应用程序中使用Microsoft的Translator API。不幸的是,大多数情况下都是意外的,服务器总是会回答一个内部服务器错误。我还用Poster[1]手动尝试了它,得到了相同的结果

更详细地说,我在做什么?我正在创建一个进入请求主体的XML字符串。我使用了C#的例子。好吧,然后我只是调用rest服务。 我的代码如下所示:

xmlns1=”http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"
xmlns2=”http://schemas.microsoft.com/2003/10/Serialization/Arrays"
xml_builder=Nokogiri::xml::builder.new(:encoding=>'UTF-8')do | xml|
translatarrayRequest(“xmlns:ms”=>xmlns1,“xmlns:arr”=>xmlns2){
xml.AppId令牌#使用临时令牌代替AppId
xml.From源代码
xml.To目标
xml.Options{
xml[“ms”].ContentType{
xml.text“text/html”
}
}
xml.text{
translate.each do| key,val|
xml[“arr”].string{
xml.text CGI::unescape(val)
}
结束
}
}
结束
标题={
“内容类型”=>“文本/xml”
}
uri=uri.parse(@@msTranslatorBase+“/translatarray”+”?appId=“+token)
req=Net::HTTP::Post.new(uri.path,头)
req.body=xml\u builder.to\u xml
response=Net::HTTP.start(uri.host,uri.port){| HTTP | HTTP.request(req)}
# [...]
xml\u生成器
生成类似以下xml的内容。与API页面中的示例不同,我定义了两个名称空间,而不是在某些标记上引用它们(主要是因为我想减少开销)——但这似乎不是问题,当我像docu示例那样执行此操作时,我还收到一个内部服务器错误


没有问题。但对我来说,XML看起来很好。文档中说明了预期XML有一个模式:

请求正文是根据http://api.microsofttranslator.com/v2/http.svc/help中指定的模式生成的xml字符串

不幸的是,我在上面找不到任何东西

现在我的问题是:我做错什么了吗?也许有人经历过类似的情况,可以报告解决方案或解决方法



[1] Poster FF plugin>addons.mozilla.org/en-US/firefox/addon/Poster/

经过大量的尝试和错误,我想我成功了。如果有人有类似的问题,下面是我如何解决的:

显然,API对传入的XML有点挑剔。但是因为没有模式(或者至少我找不到文档中指定的模式),所以很难用正确的方法来完成:标记的顺序是至关重要的


(例如,来自用户表单)通过以下方式:

ic=Iconv.new('UTF-8//IGNORE','UTF-8')
有效的\u字符串=ic.iconv(不受信任的\u字符串+“”)[0..-2]

谢谢你回答这个问题,我也想在这里插话。它不喜欢XML中的某些字符,即使您将其格式化为utf8。我有一个包含“”字符的字符串,如果传入该字符串,我将从translateArray API中获得500个错误。所有其他字符串都可以。要更正我的上一个响应,只需确保所有XML都已正确转义。
#<Net::HTTPInternalServerError 500 The server encountered an error processing the request. Please see the server logs for more details.>