微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用php,如何通过POST模拟完整的表单提交来发送数据?

我的问题是:我有一个在线服务来托管客户的目录.
此服务需要身份验证,但是我只有一个用户名/密码.
相反,我的客户希望使用自己的用户/密码和访问统计信息分别管理每个用户.所以到目前为止,我所做的就是建立自己的帐户管理.
我现在需要做的是添加一个登录表单,用户应使用自己的凭据填写该表单;发送后,脚本应继续进行身份验证,如果一切正常,请增加访问计数,通过POST发送远程系统的登录数据,然后将浏览器重定向到响应页面,方法与通常的形式相同.
我尝试通过这种方式使用curl:

if (authenticate($_POST['usr'],$_POST['pwd'])) {
    $url = "http://www.foo.com/login.PHP";
    $postdata = http_build_query(array('username'=>"foo",'password'=>"bar"));
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_exec($curl);
    curl_close($curl);
}

但是我最终将目标页面的数据加载到自己的页面中,而不是被重定向站点.
我该怎么办?
附言如果可能的话,我将避免诉诸通过JS提交的隐藏表单.
谢谢!

解决方法:

我认为您看不到您正在尝试做的所有事情.基本上,重定向不会为您提供帮助,因为身份验证不是基于URL的,而是基于Cookie或会话的.换句话说,您无法对自己进行身份验证(当您使用隐藏的凭据模拟在该网站上提交表单时会发生这种情况),并使访问者自己获得身份验证.重定向对您没有帮助.即使您重定向他,他也不会通过身份验证.您的服务器是提交表单的,而不是用户本人.

我不明白,您可以使用该隐藏凭据对用户进行身份验证,然后为他提供对统计信息的完全访问权限,为什么不给他访问权限呢?您正在为他提供对所有内容的完全访问权限,但是不为他提供登录名和密码吗?

从另一方面说,无法进行POST重定向,因此您不能在表单上使用伪造的POST数据来重定向他.重定向时,所有POST数据都会丢失.

作为一个丑陋的解决方法,我将建议以下建议:您可以像现在所做的那样对自己进行身份验证,然后让用户从您的网站浏览统计信息,类似于代理所做的事情.然后,您可以将页面上的所有链接更改为yoursite.com/viewstats/?page=URL之类的内容,其中URL是用户希望查看的统计站点页面.您抓取该页面并将其显示用户.您将需要更改css / js文件的相对路径以保持其设计,并且还需要更改所有网站内链接,例如“ / viewstats /?page =”. urlencode($old_url),以便它们指向类似代理的门.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐