我正在创建一个应用程序,可以从网站上删除数据,根据需要对其进行格式化,并将其显示给用户。现在,该站点不允许跨站点脚本请求,因此我使用PHP的curl来检索页面。
使用浏览器,该网站会在您第一次访问时为您提供cookie,要求您登录,并在后续请求中为您提供您请求的实际页面。
使用PHP的curl,该网站将只给我一个页面,要求我登录。而且,我认为,给我的PHP服务器一个cookie。
如何保存此Cookie并将其显示在后续请求中?
答案 0 :(得分:5)
使用几个setopts来设置cookie。
示例:
$ch=curl_init();
curl_setopt($ch, CURLOPT_COOKIEFILE, "c:/cookies/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "-");
答案 1 :(得分:3)
我修改了nabab的代码,尝试了它并且它完全按照我的要求工作:
$loginData = array('username'=>'myuser', 'password'=>'mypassword');
$postData = array('url'=>'http://stackoverflow.com');
$loginURL = "http://stackoverflow.com/login.php";
$addURL = "http://stackoverflow.com/addUrl.php";
$curl_options = array(
CURLOPT_RETURNTRANSFER => true, /* return web page */
CURLOPT_HEADER => false, /* don't return headers */
CURLOPT_FOLLOWLOCATION => true, /* follow redirects */
CURLOPT_ENCODING => "", /* handle all encodings */
CURLOPT_AUTOREFERER => true, /* set referer on redirect */
CURLOPT_CONNECTTIMEOUT => 120, /* timeout on connect */
CURLOPT_TIMEOUT => 120, /* timeout on response */
CURLOPT_MAXREDIRS => 10, /* stop after 10 redirects */
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0
);
$cookie = "cookie.txt";
if ( $ch = curl_init() )
{
curl_setopt_array($ch,$curl_options);
if ( $cookie )
{
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, $loginURL);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($loginData) );
$r = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, $addURL);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData) );
$r = curl_exec($ch);
}
curl_close($ch);
}
答案 2 :(得分:1)
你必须使用cookie。这就是我的工作方式(我返回一个包含html内容的数组和可用于抓取的编码):
$curl_options = array(
CURLOPT_RETURNTRANSFER => true, /* return web page */
CURLOPT_HEADER => false, /* don't return headers */
CURLOPT_FOLLOWLOCATION => true, /* follow redirects */
CURLOPT_ENCODING => "", /* handle all encodings */
CURLOPT_AUTOREFERER => true, /* set referer on redirect */
CURLOPT_CONNECTTIMEOUT => 120, /* timeout on connect */
CURLOPT_TIMEOUT => 120, /* timeout on response */
CURLOPT_MAXREDIRS => 10, /* stop after 10 redirects */
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0
);
if ( $ch = curl_init($url) )
{
curl_setopt_array($ch,self::$curl_options);
if ( $cookie )
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie);
$r = curl_exec($ch);
curl_close($ch);
}
}