05/21
2016
<?php header("Access-Control-Allow-Origin:http://spotlight.pics"); $url=$_GET['url']; $refer = "http://www.pixiv.net/"; $cookie = "key1=value1;key2=value2;key3=value3";//设置cookie信息 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); curl_setopt($ch, CURLOPT_REFERER, $refer); curl_setopt($ch, CURLOPT_COOKIE, $cookie);//携带cookie信息 $cexecute = curl_exec($ch); if ($cexecute) { echo $cexecute; }else{ echo "false"; } curl_close($ch); ?>
主要就是带注释的那两句。$cookie里的值只是个示范,我当然不会把自己的cookie暴露出来滴~设置好一些必须的cookie就能以登录状态抓取网页了。
今天有人想让我给pixiv图片下载器增加下载pixiv Spotlight的功能。这里面涉及到两个问题,一个是跨域,一个是登陆状态。
首先看看跨域问题。pixiv Spotlight的主域名不是pixiv.net,而是spotlight.pics。以前我抓取网页没有遇到跨域问题,因为那时全都是在pixiv.net域中操作的,用ajax就可以获取到其他网页的内容。现在不行了,只能在自己服务器上做了个如上的php文件,在header中设置Access-Control-Allow-Origin来接收来自pixiv Spotlight的请求。接收到请求后,就去抓取网页。
这时就遇到第二个问题了。因为抓取是从我服务器发出的,不是从浏览器发出的,所以没有cookie,抓取到的网页是未登录时会出现的注册页面。后来搜到了CURLOPT_COOKIE这个参数,可以在curl中携带cookie信息,这样就像正常登陆一样,能获取到登陆后的页面了。这样才解决了问题。
现在我php里设置的cookie信息是我自己的,一直使用现在的cookie值不知道以后会不会失效。只能用着看了。