实际上,事情变得如此混乱,以至于我甚至不确定curl是否是罪魁祸首。因此,这里是PHP代码:
$creds = array(
'pw' => "xxxx",
'login' => "user"
);
$login_url = "https://www.example.net/login-form"; //action value in real form.
$loginpage = curl_init();
curl_setopt($loginpage, CURLOPT_HEADER, 1);
curl_setopt($loginpage, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($loginpage, CURLOPT_URL, $login_url);
curl_setopt($loginpage, CURLOPT_POST, 1);
curl_setopt($loginpage, CURLOPT_POSTFIELDS, $creds);
$response = curl_exec($loginpage);
echo $response;
我得到了标题(与正常的成功请求的标题匹配),接着是登录页面(我猜测curl捕获了这个页面由于重定向),显示出一个"错误联系类型"的错误。
我原本认为问题是请求的主机设置为请求服务器而不是远程服务器,但后来我注意到(在Firebug中),请求被发送为GET,而不是POST。
如果我复制登录网站的表格,将其剥离成仅具有值的表单元素,并将完整的URL放到操作中,它就可以完美地工作。所以我认为这不是一个安全问题,登录请求必须在同一台服务器上发起等等。(我甚至摆脱了空的隐藏值和所有设置其他cookie的JS)。
然而,我很快就感到困惑了。
有任何想法为什么它显示为GET,或者为什么它不起作用?