2013-01-23 45 views
1

我想在ColdFusion中创建功能,让我登录到EA体育Web应用程序,所以我可以取回我的个人资料数据和我的网站上显示。登录使用CFHTTP

看着他们的登录页面的第一步只是似乎是一个简单的登录表单的源代码:

<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&amp;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&amp;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>这我假设表示登录尚未成功。

我知道我不会给你太多的在这里玩,但似乎没有成为一个伟大的交易更以试图获得登录认证。任何人都可以指出我可能会出错的地方吗?

+3

3件事情在我身上跳出来。我不知道这是“答案”,所以我只是评论。 1,你不包括所有的表单域。仅仅因为你不需要它们并不意味着它们不会被处理程序需要,反过来会导致错误。 2,这看起来并不像一个真正的API,因此它可能是EA是想看看是否提交表单的实际形式,所以你可能不能够远程提交。最后,对于CFHTTP默认的用户代理是“COLDFUSION”,你可能会想改变这种状况,以更有效的浏览器的名字,我已经是阻止我几次。 – Travis

+0

这是您正在倾销的myResult变量吗? –

+0

这只是myResult。fileContent变量我正在转储,但现在当我添加其他表单字段时,它会从fileContent变量中将它们的内容带回来,所以我假定登录失败并进入failureURL页面? – CPB07

回答

2

我不知道这是否会解决你的问题,但有些时候你远程提交表单要考虑几件事情。

首先,是你不知道所在的形式背后的逻辑是什么,所以你应该在案件处理程序需要它的东西表单提交的所有信息。如果您希望某个表单字段没有提交,则会发生错误,并且您将不会登录。

其次,您可以在技术上考虑您的操作,尽管对于您的操作完全合法,但不管是机器人还是黑客。目标网站可能正在查看确保处理程序实际上是由表单访问的。他们可以看HTTP_REFERER或他们甚至可以做一些更花哨的东西就像是在看你的会话期间,因为没有人能够在0.0001秒提交表单。在这些情况下,除非您发现其安全逻辑存在缺陷,否则您可能不会登录。

第三,确保网站的一些逻辑还着眼于客户,以确保你是一个真正的浏览器的一部分。 userAgent属性的默认值是“COLDFUSION”。如果目标是期待着什么时间越长,或包含一个有效的浏览器名称,脚本会假设你是一个机器人,并拒绝该请求。尽管如此,解决方案很简单。只需在您的userAgent属性中添加一个好的浏览器名称即可。你可以通过倾销cgi范围来获得你的。这里的问题是,你应该有些人坚持它,你不是想怎么那么使用旧的浏览器今后的5年内从现在的目标说“对不起,哥们儿。我们不再支持IE6 ...'

<cfhttp userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; {...}" ...> 
+0

设置userAgent属性似乎解决了此问题,现在我可以登录。 我不认为你有很多经验将PHP数组转换为CF数据? – CPB07

+0

先尝试,然后用您的代码发布另一个问题。代码转换的问题得到了很多垃圾。我建议不要把php标签放在它上面,因为它会成为转换它的CF人员,而PHP人员可能更容易关闭它。 – Travis

0

是您登录需要使用cookie的网站来实现这个,因为这是他们如何让你登录和维护会话。 然后,该cookie被发送到服务器与每个后续页面请求验证您的身份为被登录。 所以,你需要与你的CFHTTP请求效仿这一点。 请参阅本文 http://www.bennadel.com/blog/725-Maintaining-Sessions-Across-Multiple-ColdFusion-CFHttp-Requests.htm

+0

这只是一个问题,如果你想维持一个会话。提交表单并敲击处理程序不需要您维护会话,并且工作良好,除非第二个cfhttp请求需要来自不同页面的服务器上的某些内容。这可能会有所帮助,但他的问题中的线索并未指出这个问题。 – Travis

+0

有后续cfhttp请求,将需要返回数据我假设和我的第一个请求返回两个cookie,我捕获并设置变量传入时,我做了后续cfhttp请求,但此刻我假设我不会对随后的请求产生任何喜悦,因为我的初始请求似乎没有验证我通过的帐户详细信息。 – CPB07