Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php Cookie登录_Php_Curl_Cookies_Login - Fatal编程技术网

使用php Cookie登录

使用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(

我需要帮助才能像图中所示那样登录。(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, 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代码时,它确实成功地登录了。。。