朋友忽然提了个问题,说自己模拟请求发送的时候和在浏览器中直接访问返回的字符串不一样,我猜应该是http头的问题,在浏览器中复制出来请求头信息,模拟和浏览器请求头一样的信息发送过去,问题解决。
$headers = array(
// 'Referer:http://quote.fx168.com/gold/'
// 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
// 'Accept-Encoding: gzip, deflate',
'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8'
// 'Cache-Control: max-age=0',
// 'Connection: keep-alive',
// 'Host: www.ccgp-tianjin.gov.cn',
// 'Upgrade-Insecure-Requests: 1',
// 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
);
$url = 'http://www.ccgp-tianjin.gov.cn/portal/topicView.do?method=view&page=2&id=1665&view=Infor';
//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
var_dump($data);
建议大家好好研究下http头里面的各个参数,很多网站都用到了Referer这个参数做防盗链