我正在尝试在ColdFusion中创建一个函数,允许我登录到EA Sports Web App,这样我就可以检索我的个人资料数据并将其显示在我的网站上。
从他们的登录页面查看源代码,第一步看起来就是一个简单的登录表单:
<form method="post" id="login_form" action="https://www.ea.com/uk/football/services/authenticate/login" class="login_form" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="redirectUrl" value="http://www.ea.com/uk/football/fifa-ultimate-team" />
<input type="hidden" name="failureUrl" value="http://www.ea.com/uk/football/login?failed=true&redirectUrl=http%3A%2F%2Fwww.ea.com%2Fuk%2Ffootball%2Ffifa-ultimate-team" />
<input type="hidden" name="captchaFailureUrl" value="http://www.ea.com/uk/football/login?failed=true&redirectUrl=http%3A%2F%2Fwww.ea.com%2Fuk%2Ffootball%2Ffifa-ultimate-team" />
<input id="email" name="email" class="text" type="text" tabindex="1" />
<input id="password" name="password" class="text" type="password" tabindex="2" />
<input type="checkbox" id="stay-signed" name="stay-signed" value="ON" checked="checked" tabindex="3" />
</form>我正在使用CFHTTP请求提交以下内容:
<cfhttp url="https://www.ea.com/uk/football/services/authenticate/login" method="POST" result="myResult">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded" />
<cfhttpparam type="formField" name="email" value="#Variables.user#" />
<cfhttpparam type="formField" name="password" value="#Variables.password#" />
</cfhttp>当我转储返回的内容时,fileContent包含以下内容:<authenticate><success>0</success></authenticate>,我认为这意味着登录没有成功。
有人能指出我可能会出错的地方吗?
发布于 2013-01-23 22:38:43
我不确定这是否能解决您的问题,但当您远程提交表单时,有几件事需要考虑。
首先,您不知道表单背后的逻辑是什么,所以您应该提交表单中的所有内容,以防处理程序需要它。如果它需要您未提交的表单域,则会出现错误,并且您将无法登录。
其次,你可以从技术上考虑你的行为,尽管对于你的使用来说是完全合法的,一个机器人或黑客。目标网站可能希望确保处理程序确实被表单访问。他们可能在查看HTTP_REFERER,或者甚至可以做一些更花哨的事情,比如查看会话的持续时间,因为没有人能在.0001秒内提交表单。在这些情况下,您很可能根本不会登录,除非您发现它们的安全逻辑中存在缺陷。
第三,为了确保站点的安全,一些逻辑还会查看客户端,以确保您是真正的浏览器。userAgent属性的默认值是"COLDFUSION“。如果目标需要更长的内容,或者包含有效的浏览器名称,脚本将假定您是机器人,并拒绝请求。不过,这个问题的解决方案很简单。只需在userAgent属性中输入一个好的浏览器名称即可。您可以通过转储cgi作用域来获取您的代码。这样做的问题是,你应该如何维护它,这样你就不会在5年后尝试使用旧浏览器,目标会说‘对不起,朋友,我们不再支持IE6了……’
<cfhttp userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; {...}" ...>发布于 2013-01-23 22:18:15
所有登录你的网站都需要使用cookies来实现这一点,因为这是他们让你保持登录和维护会话的方式。然后,该cookie随每个后续页面请求一起发送到服务器,以验证您是否已登录。因此,您需要使用cfhttp请求来模拟这一点。请参阅本文http://www.bennadel.com/blog/725-Maintaining-Sessions-Across-Multiple-ColdFusion-CFHttp-Requests.htm
https://stackoverflow.com/questions/14480038
复制相似问题