Groovy Can';我不理解为什么谷歌翻译RESTAPI返回HTTP 400

Groovy Can';我不理解为什么谷歌翻译RESTAPI返回HTTP 400,groovy,apache-camel,google-translate,Groovy,Apache Camel,Google Translate,使用此驼峰路由向Google Translate API发送POST请求: from("direct:start"). setHeader(Exchange.HTTP_METHOD, constant('POST')). setHeader('X-HTTP-Method-Override', constant('GET')). setBody(constant('q=Hello')).

使用此驼峰路由向Google Translate API发送POST请求:

from("direct:start").
setHeader(Exchange.HTTP_METHOD, constant('POST')).
setHeader('X-HTTP-Method-Override', constant('GET')).
setBody(constant('q=Hello')).                                                                                                                                                                                                           
log(LoggingLevel.INFO, 'sourcingtool', '${body}').
to("https://www.googleapis.com/language/translate/v2?key=${api_key}&target=fr").
to('stream:out')
出于某种原因,我们得到了HTTP 400。 谁发现请求中有问题

更新1 当我使用
curl
并发送类似请求时,一切都像一个符咒:


curl-XPOST-H“X-HTTP-Method-Override:GET”--data“q=Hello”https://www.googleapis.com/language/translate/v2?key=MY_API_KEY&target=fr“

答案很简单。我只需要显式设置内容类型:

from("direct:start").
setHeader(Exchange.HTTP_METHOD, constant('POST')).
setHeader(Exchange.CONTENT_TYPE, constant('application/x-www-form-urlencoded')). // this one did a trick
setHeader('X-HTTP-Method-Override', constant('GET')).
setBody(constant('q=Hello')).                                                                                                                                                                                                           
log(LoggingLevel.INFO, 'sourcingtool', '${body}').
to("https://www.googleapis.com/language/translate/v2?key=${api_key}&target=fr").
to('stream:out')

答案很简单。我只需要显式设置内容类型:

from("direct:start").
setHeader(Exchange.HTTP_METHOD, constant('POST')).
setHeader(Exchange.CONTENT_TYPE, constant('application/x-www-form-urlencoded')). // this one did a trick
setHeader('X-HTTP-Method-Override', constant('GET')).
setBody(constant('q=Hello')).                                                                                                                                                                                                           
log(LoggingLevel.INFO, 'sourcingtool', '${body}').
to("https://www.googleapis.com/language/translate/v2?key=${api_key}&target=fr").
to('stream:out')

这是一个错误。您是否检查了camel请求中发送的url是否实际转换为curl中的url。什么是${api_key}?是的,我查过了。看起来不错。当我替换POST以获取时,删除正文并将其附加到查询字符串中-一切正常。但是,我需要POST,因为我的查询(
q=
参数)可能很大(谷歌最多允许5K个字符)。
api\u key
是正确的。这是一个400错误。您是否检查了camel请求中发送的url是否实际转换为curl中的url。什么是${api_key}?是的,我查过了。看起来不错。当我替换POST以获取时,删除正文并将其附加到查询字符串中-一切正常。但是,我需要POST,因为我的查询(
q=
参数)可能很大(谷歌最多允许5K个字符)。
api\u key
是正确的。