我编写了一个接受第三方 POST 的 CF10 RESTful Web 服务。POST 成功地带有正确的标头,表明它的内容类型是 application/json 并且内容编码是 gzip。
然而身体是这样进来的
??VJ.-.??M-?LQ?R22?0W?Q??Os-????b??????_?ZT??175 ????T?E???r??KKJ??3??S]A?@u??%??`?f??FJ???`?
问题在于,在接收函数中,cfargument
forbody
设置type="string"
为何时真正应该是type="binary"
。不幸的是,将类型设置为二进制会导致调用失败。调用服务器收到以下信息:
通知响应 HTTP/1.1 500 内部服务器错误 Content-Length: 41 Content-Type: text/plain Server: Microsoft-IIS/7.5 CF_TOMCAT_REUSE_THIS_CONNECTION: FALSE X-Powered-By: ASP.NET Date: Thu, 30 May 2013 19:53 :17 GMT 连接:关闭
{"Message":"变量 BODY 未定义。"}
我无法控制第三方对我的 REST 端点的调用。
有没有人有任何想法可以让我的 REST 端点接收这个 gzip 压缩的(二进制)正文?或者,有谁知道如何将字符串表示形式转换回 gzip 的二进制文件,然后可以对其进行膨胀,然后我可以恢复 json 数据包?
我的代码如下所示:
<cffunction name="trigger" access="remote" returntype="string" httpmethod="POST">
<cfargument name="body" type="any" >
<cfargument name="Length" type="String" restArgsource="Header" restargname="Content-Length" >
<cfargument name="Type" type="String" restArgsource="Header" restargname="Content-Type">
<cfargument name="Encoding" type="String" restArgsource="Header" restargname="Content-Encoding" >
<cfset var result = "HTTP/1.1 200 OK" >
<!--- Do some processing here --->
<cfreturn result>
</cffunction>
谢谢大家。