表单提交和cURL请求之间有什么区别?

我正在尝试向SalesForce.com提交数据,但我想通过AJAX来实现。 由于有限制来阻止XSS,我让jQuery使用AJAX提交到我的服务器上的PHP页面,然后让该页面简单地转发它传递给正确URL的formdata。

如果我提交表格并关闭JS,一切都会顺利进行。 如果我打开它,Salesforce会确认收到数据(在调试模式下),但它没有出现在我的队列中,或者在SF中的任何地方。 SF吐出它传递的所有字段,并且它正在吐出我在表单中的每个字段,并正确填写。

通过此方法(jQuery的$.ajax()到PHP cURL)和通过本机HTML提交按钮提交内容之间是否有任何区别? 可能导致SF注册数据的东西,但注册方式不同? 我已经尝试添加CURLOPT_HEADER / CURLOPT_HTTPHEADER信息

嗯,唯一不同的是你不能伪造的是请求的IP地址。 根据salesforce正在使用的保护程度,您可能无法欺骗单独的IP地址(它会检测并拒绝请求)。

其他一切都应该100%可伪装(标题等)。 我建议您使用firebug或TamperData,并查看通常从浏览器发送到salesforce的原始标头。 然后从PHP复制那个确切的请求。 如果您需要其他信息,可以在JS中检测到它并将其传递给PHP(Cookie信息,浏览器信息等)……

$ .ajax()从客户端浏览器传输cookie; 它还添加了一个“X-Requested-With:XMLHttpRequest”请求标头。

也许尝试将运行php代码的机器的(外部)IP地址添加到salesforce中的可信网络列表中。 登录到salesforce,然后转到设置 – >安全控制 – >网络访问,并在那里添加IP。

我遇到了类似的问题,不得不添加运行连接到sf的java应用程序的服务器的IP地址,这解决了我的问题。