实际上,它变得如此混乱,以至于我什至不确定 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,或者为什么它不工作,就此而言?