当前位置:Gxlcms > PHP教程 > 用fsockopen获取百度的搜索页

用fsockopen获取百度的搜索页

时间:2021-07-01 10:21:17 帮助过:5人阅读

我用php的函数fsockopen和fwrite,fgets等命令可直接获得http://www.baidu.com主页的内容,但却不能获得http://www.baidu.com/s?wd=音箱&pn=20的内容,甚是苦闷,觉得是百度做了防范了,但奇怪的是我将浏览器中所有的缓存和cookie都清除掉了,直接用地址栏访问http://www.baidu.com/s?wd=音箱&pn=20,却能够直接获得内容,但用php函数获取,却怎么也不行。百度是怎么能够区别出浏览器访问和程序访问的呢?哪位达人能说说原因和指点下迷津吗。
我没更多分了,用钱买php解决方案也行啊


回复讨论(解决方案)

添加 useragent 试试,
参考:http://tuzwu.iteye.com/blog/723260

当然试过了,已经参照Fiddler2截获的数据进行了全模仿

我觉得是你网络有问题

字符集编码问题吧?

奇了怪了,用file_get_contents确实可行,但用我的方法只是百度不能获取,其他网址都成功,这是为什么呢?

字符集编码没问题,我已经反复试验过了,同样的编码,file_get_contents是可以的

不知道你是怎么写的

$fp = fsockopen("www.baidu.com", 80, $errno, $errstr, 30);$out = "GET /s?wd=音箱&pn=20 HTTP/1.1\r\n";$out .= "Host: www.baidu.com\r\n";$out .= "Connection: Close\r\n\r\n";fwrite($fp, $out);while (!feof($fp)) {  echo fgets($fp, 128);}fclose($fp);
这回不贴图了,贴个数据片段
Resource id #2HTTP/1.1 200 OK
Date: Fri, 29 Nov 2013 07:21:48 GMT
Server: BWS/1.0
Content-Length: 109229
Content-Type: text/html;charset=utf-8
Cache-Control: private
BDPAGETYPE: 3
BDUSERID: 0
BDQID: 0xba09dfbd018d026b
Set-Cookie: BDSVRTM=245; path=/
Set-Cookie: H_PS_PSSID=4316_1462_4181_4261; path=/; domain=.baidu.com
Set-Cookie: BAIDUID=93A4FEBC6A24E74B727FEE7001E65B50:FG=1; expires=Fri, 29-Nov-43 07:21:47 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Connection: Close

......

>音箱频道音箱报价中心 品牌 漫步者 BOSE 麦博 惠威 JBL 飞利浦 奋达 罗技 小米 三诺 创新 朗琴 更多>> 价格 100元以下 101-200元 201-300元 301-500元 501-800元...speaker.pcpop.com/soundbox/ 2013-11-11 - target="_blank"
class="m">百度快照查看更多关于“音箱 频道”的内容 >>

data-click="{
'F':'778317EA',
'F1':'9D73F1E4',
'F2':'4CA6DD6B',
'F3':'54E5243F',
'T':'1385709708',
'y':'F3D2FEDF'

}"
href="http://www.baidu.com/link?url=iHdhI9m-N3i0M6QsBp8zjalqAtClICWD28BH_hXsPvRlaAAlSHQ9pzL0AZsRgan2"

target="_blank"

>音箱_电脑音箱_音响-IT168音箱频道

IT168音箱频道向您提供最专业最权威的音箱音响产品评测,为您带来最新最准确的音箱音响产品资讯报价信息,给您提供各种档次音箱音响产品评析,帮您更好的选购...sound.it168.com/ 2013-11-15