我在Railo-Express-4.1.1.009下遇到了cfhttp
的cookie问题。
我的代码执行两步http调用。第一步是使用远程应用程序执行授权。如果成功,远程服务器将返回一个授权cookie,该cookie将被提取并传递给第二个调用,如下所示:
<cfhttp url="http://remoteserver/targetPath" port="xxxx" method="get" result="Local.response" throwonerror="true" redirect="false">
<cfhttpparam name="Action" value="Ping" type="URL" />
<cfhttpparam name="mansession_id" value="#Local.result.authCookie#" type="cookie" />
</cfhttp>
http呼叫成功,但响应基本上说我没有被授权。 (这就是“许可被拒绝”在这种情况下的实际意义)。
<response='Error' message='Permission denied'... />
但是,完全相同的代码(从同一个框中运行)与CF9成功:
<response='Success' ping='Pong' ... />
我仔细检查了第一次cfhttp调用的响应头,并验证我将正确的#Local.result.authCookie#值传递给第二次调用:
set-cookie : mansession_id="932a4086";
AUTHCOOKIE string 932a4086
由于一切都是相同的,除了运行cfml的引擎之外,我得出结论cfhttp
可能没有正确传递cookie。我尝试了很多东西,但此时我已经没有想法了。任何关于如何解决问题或进一步解决问题的想法都将不胜感激。
更新
我决定尝试不同版本的Railo(因为Express版本使它变得如此简单)并且发现代码在3.3.3.001(但不是4.0.4.001)下工作。所以必须在4.x中打破一些东西。
答案 0 :(得分:2)
我会安装Fiddler,然后将proxyServer = localhost和proxyPort = 8888属性添加到CFHTTP调用。然后,您可以通过fiddler观看HTTP请求。如果您的CF服务器在另一个盒子上,您仍然可以在桌面上运行Fiddler,只需在Fiddler的设置中打开“允许其他机器连接”,并在proxyServer属性中提供您的机器名称而不是localhost。
你处在一个很好的境地,你可以在某些环境中而不是其他环境中工作,所以你应该能够以不同的方式看到发生的事情。
您可以手动比较http请求,也可以将Fiddler配置为使用差异工具。选择两个请求,然后右键单击 - >比较。我强烈推荐Scooter Software的Beyond Compare 3作为差异化工具。
请根据您的发现更新您的问题,因为我想知道结果。