我需要帮助才能像图像中显示的那样进行登录。(www.hurl.it)
这应该在PHP中用cURL来完成。这是我到目前为止所拥有的,但它对我不起作用:
$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);
发布于 2017-09-07 18:23:42
当我在这里测试你的代码时,你的代码工作正常,并且确实登录了。我投票结束这个问题,因为你只是说“它对我不起作用”,而没有解释它如何对你不起作用。
但是,在调试时,不要使用print_r
,而要使用var_dump
。例如,如果curl
得到一个错误,它将返回 bool(false) ,而当您将bool(False)提供给print_r
时,它将完全不打印任何内容,也不会给您任何线索。
但是,如果您将bool(false)提供给var_dump
,它实际上将打印bool(false)。
此外,当专门调试curl
代码时,启用CURLOPT_VERBOSE
,它会打印许多有用的调试信息。当curl_exec
返回false时,您应该使用curl_error()
来提取错误消息。
简而言之,将$result = curl_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_VERBOSE
,不要忽略setopt
返回值,使用var_dump
而不是print_r
,如果它仍然不起作用,打印详细日志,以及CURLOPT_VERBOSE
、var_dump
和curl_error
打印的任何内容,然后我将收回我的接近投票。
https://stackoverflow.com/questions/46080690
复制相似问题