我正在连接到使用cookie对用户进行身份验证的API服务.我从命令提示符下创建这两个语句,它可以工作.
curl -d "u=username&p=password" -c ~/cookiejar https://domain/login
curl -b https://domain/getData
Run Code Online (Sandbox Code Playgroud)
现在我想使用curl 制作两个等效的php文件login.php和get_data.php.
我在用
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
Run Code Online (Sandbox Code Playgroud)
在 login.php
和
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
Run Code Online (Sandbox Code Playgroud)
在 get_data.php
它不起作用.Cookie文件正在创建,但第二个curl没有读取它.这是正确的方法吗?我是否必须单独阅读cookie文件并设置标题Cookie
?任何帮助将不胜感激.谢谢.
Jos*_*ust 14
这样就可以了.我以Google.com为例运行它:
<?PHP
// open a site with cookies
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0');
curl_setopt($ch, CURLOPT_HEADER ,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$content = curl_exec($ch);
// get cookies
$cookies = array();
preg_match_all('/Set-Cookie:(?<cookie>\s{0,}.*)$/im', $content, $cookies);
print_r($cookies['cookie']); // show harvested cookies
// basic parsing of cookie strings (just an example)
$cookieParts = array();
preg_match_all('/Set-Cookie:\s{0,}(?P<name>[^=]*)=(?P<value>[^;]*).*?expires=(?P<expires>[^;]*).*?path=(?P<path>[^;]*).*?domain=(?P<domain>[^\s;]*).*?$/im', $content, $cookieParts);
print_r($cookieParts);
?>
Run Code Online (Sandbox Code Playgroud)
请参阅其他示例,了解如何有效地解析诸如字符串.