使用php Cookie登录
我需要帮助才能像图中所示那样登录。(www.hull.it) 这应该在带有cURL的PHP中完成。 这是我目前所拥有的,但对我来说并不适用:使用php Cookie登录,php,curl,cookies,login,Php,Curl,Cookies,Login,我需要帮助才能像图中所示那样登录。(www.hull.it) 这应该在带有cURL的PHP中完成。 这是我目前所拥有的,但对我来说并不适用: $c = curl_init('https://www.mkr.cl/users/login?redirect=/store/product/22207'); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_AUTOREFERER, 1 ); curl_setopt(
$c = curl_init('https://www.mkr.cl/users/login?redirect=/store/product/22207');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_AUTOREFERER, 1 );
curl_setopt($c, CURLOPT_HEADER, 1);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($c, CURLOPT_POST,true);
curl_setopt($c, CURLOPT_POSTFIELDS, 'username=76696459-1&password=7669');
curl_setopt($c, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($c, CURLOPT_COOKIEFILE, 'cookies.txt');
$result = curl_exec($c);
curl_close($c);
print_r($result);
当我在这里测试运行代码时,您的代码工作正常,并且确实登录了。我投票结束了这个问题,因为你只是说“它对我不起作用”,而没有解释它如何对你不起作用 但是,在调试时,不要使用
print\u r
,而是使用var\u dump
。例如,如果curl
获取错误,它将返回bool(false),当您将bool(false)赋给print\r
时,它将完全不打印任何内容,不给您任何发生的线索
但是,如果您将bool(false)指定给var\u dump
,它实际上会打印bool(false)
另外,当调试curl
代码时,特别是启用CURLOPT\u VERBOSE
,它会打印大量有用的调试信息。当curl\u exec
返回false时,应使用curl\u error()
提取错误消息
简而言之,替换$result=curl\u exec($c)代码>带有:
curl_setopt($c,CURLOPT_VERBOSE,true);
$result = curl_exec($c);
if(false===$result){
throw new \RuntimeException('curl_exec failed! errno: '.curl_errno($c).'. error: '.curl_error($c));
}
var_dump($result);
此外,如果设置任何curl选项时出现问题,curl_setopt将返回bool(false),您在这里也会完全忽略它,不要这样做!使用类似于:
function ecurl_setopt ( /*resource*/$ch , int $option , /*mixed*/ $value ):bool{
$ret=curl_setopt($ch,$option,$value);
if($ret!==true){
//option should be obvious by stack trace
throw new RuntimeException ( 'curl_setopt() failed. curl_errno: ' . curl_errno ($ch).'. curl_error: '.curl_error($ch) );
}
return true;
}
现在,如果应用设置时出现问题,将抛出异常,而不是静默忽略setopt错误。无论如何,应用CURLOPT\u VERBOSE
,不要忽略setopt
返回值,使用var\u dump
而不是print\u r
,如果仍然不起作用,打印详细日志,以及CURLOPT\u VERBOSE
和var\u dump
和curl\u error>打印的内容,然后,我将撤回我的投票。具体来说,它是如何不起作用的?你有错误吗?结果与您期望的结果有什么不同?我还没有确认,但很可能他们拒绝登录没有有效会话id的任何人。因此,首先,使用GET请求从登录页面获取会话id,然后,当您实际拥有会话id时,使用cookie会话id执行登录POST请求。编辑:现在我已经检查了它,我错了。如果您尝试在没有会话id的情况下登录,则POST请求本身将获得1,您将登录。事实上,当我在这里测试运行您的curl代码时,它确实成功地登录了。。。