您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

求助php无法抓取网页,问了几个人都没解决

2024/5/17 20:16:54发布8次查看
本帖最后由 dz215136304 于 2013-06-11 11:35:47 编辑
url必须为以下代码中的url,经测试,在抓取时,如果q后面的参数带空格,他会自动把&转换成&,从而造成数据无法抓取,在网页中直接输入网址是可以得到内容的,求解决方法
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz claiborne&page=1&showmode=list;echo post($url);function post($url, $post = null)//请求的网页{$context = array(); if (is_array($post)) { ksort($post); $context['http'] = array ( 'timeout'=>60, 'method' => 'post', 'header'=>>accept-language: en/r/n, 'content' => http_build_query($post, '', '&'), ); }return file_get_contents($url, false, stream_context_create($context));}
错误提示:
warning: file_get_contents(http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz claiborne&page=1&showmode=list) [function.file-get-contents]: failed to open stream: http request failed! http/1.1 505 http version not supported in f:\wwwroot\gettaobao\test.php on line 25
回复讨论(解决方案) 你可以先看看html 字符实体
file_get_contents ? 将整个文件读入一个字符串
说明
string file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen ]]]] )
和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为 maxlen 的内容。如果失败,file_get_contents()将返回 false。
file_get_contents()函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。
note: 如果要打开有特殊字符的 url (比如说有空格),就需要使用 urlencode() 进行 url 编码。
另外
'header'=> >accept-language: en /r/n
红字部分是什么?
>是多余的,/r/n应为\r\n
header不正确的话,服务器端返回错误(505)就是正常的了
file_get_contents ? 将整个文件读入一个字符串
说明
string file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen ]]]] )
和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为 maxlen 的内容。如果失败,file_get_contents()将返回 false。
file_get_contents()函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。
note: 如果要打开有特殊字符的 url (比如说有空格),就需要使用 urlencode() 进行 url 编码。
另外
'header'=> >accept-language: en /r/n
红字部分是什么?
>是多余的,/r/n应为\r\n
header不正确的话,服务器端返回错误(505)就是正常的了
通过url编码后一样无法获得数据 ,代码如下
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=lizclaiborne&page=1&showmode=list;echo post(urlencode($url));function post($url, $post = null)//请求的网页{$context = array(); if (is_array($post)) { ksort($post); $context['http'] = array ( 'timeout'=>60, 'method' => 'post', 'header'=>accept-language: en\r\n, 'content' => http_build_query($post, '', '&'), ); }return file_get_contents($url, false, stream_context_create($context));}
实际的错误是:http/1.1 505 http version not supported
file_get_contents(str_replace(' ', '%20', $url));
现在可以了,刚才可能是他的服务器出现了问题 $url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=lizclaiborne&page=1&showmode=list;echo file_get_contents($url);
{result:true,totalpage:100,catmap:,ppath:,category:,auctiontagflag1:,auctiontagflag2:,auctiontagflag3:,listitem:[
           {name:团购价美国真品liz claiborne丽资克莱本女款中款钱包 liz钱包 ,img:http://q.i02.wimg.taobao.com/bao/uploaded/i1/t18zyyxfxgxxxc8sla_122312.jpg_90x90.jpg,img2:http://q.i04.wimg.taobao.com/bao/uploaded/i1/t18zyyxfxgxxxc8sla_122312.jpg,iswebp:,url:http://a.m.taobao.com/i2431550873.htm?rn=bwhgei1-zclpekbbgc1lfjhm45-d1glr8o-pug7&sid=8b9c27255c655b1e,previewurl:http://a.m.taobao.com/ajax/pre_view.do?itemid=2431550873&sid=8b9c27255c655b1e,favoriteurl:http://fav.m.taobao.com/favorite/to_collection.htm?itemnumid=2431550873&sid=8b9c27255c655b1e,
    icon:[0 ],
    price:39.00,originalprice:39.00,freight:10,area:天津,act:月售1,itemnumid:2431550873,nick:金缕衣_2007,
.......... 嗯,粘错了数据
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz claiborne&page=1&showmode=list;
这个不行 http/1.1 505 http version not supported
这样都行
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz +claiborne&page=1&showmode=list;
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz %20claiborne&page=1&showmode=list;
他的服务器不知做了什么设置,不接受未经 url 编码的数据
嗯,粘错了数据
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz claiborne&page=1&showmode=list;
这个不行 http/1.1 505 http version not supported
这样都行
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz +claiborne&page=1&showmode=list;
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz %20claiborne&page=1&showmode=list;
他的服务器不知做了什么设置,不接受未经 url 编码的数据
服务器可以接受“未经 url 编码的数据”吗?
怎么我理解的是服务器只能接受经过url编码的数据呢,
如果我们直接把带空格的地址在浏览器打开,
那浏览器已经自动把url编码了,
所以打开正常,
但是php并不是浏览器,
所以它不会自动做这些事情,
需要手动进行编码,
难道不是这样的吗?
嗯,粘错了数据
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz claiborne&page=1&showmode=list;
这个不行 http/1.1 505 http version not supported
这样都行
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz +claiborne&page=1&showmode=list;
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz %20claiborne&page=1&showmode=list;
他的服务器不知做了什么设置,不接受未经 url 编码的数据
服务器可以接受“未经 url 编码的数据”吗?
怎么我理解的是服务器只能接受经过url编码的数据呢,
如果我们直接把带空格的地址在浏览器打开,
那浏览器已经自动把url编码了,
所以打开正常,
但是php并不是浏览器,
所以它不会自动做这些事情,
需要手动进行编码,
难道不是这样的吗?
空格符(\x20)是url合法字符,怎么处理视乎服务器
你做过http socket的话就知道了,header发送带空格的url一般也是可接受的
嗯,粘错了数据
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz claiborne&page=1&showmode=list;
这个不行 http/1.1 505 http version not supported
这样都行
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz +claiborne&page=1&showmode=list;
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz %20claiborne&page=1&showmode=list;
他的服务器不知做了什么设置,不接受未经 url 编码的数据
服务器可以接受“未经 url 编码的数据”吗?
怎么我理解的是服务器只能接受经过url编码的数据呢,
如果我们直接把带空格的地址在浏览器打开,
那浏览器已经自动把url编码了,
所以打开正常,
但是php并不是浏览器,
所以它不会自动做这些事情,
需要手动进行编码,
难道不是这样的吗?
空格符(\x20)是url合法字符,怎么处理视乎服务器
你做过http socket的话就知道了,header发送带空格的url一般也是可接受的
那就是说查询字符串不管是什么字符,
服务器都可以全部原样接收到是吗?
正确的写法是:
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=. urlencode('liz claiborne') . &page=1&showmode=list;
嗯,粘错了数据
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz claiborne&page=1&showmode=list;
这个不行 http/1.1 505 http version not supported
这样都行
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz +claiborne&page=1&showmode=list;
$url=http://110.75.65.8/search_turn_page_iphone.htm?sort=&q=liz %20claiborne&page=1&showmode=list;
他的服务器不知做了什么设置,不接受未经 url 编码的数据
服务器可以接受“未经 url 编码的数据”吗?
怎么我理解的是服务器只能接受经过url编码的数据呢,
如果我们直接把带空格的地址在浏览器打开,
那浏览器已经自动把url编码了,
所以打开正常,
但是php并不是浏览器,
所以它不会自动做这些事情,
需要手动进行编码,
难道不是这样的吗?
空格符(\x20)是url合法字符,怎么处理视乎服务器
你做过http socket的话就知道了,header发送带空格的url一般也是可接受的
那就是说查询字符串不管是什么字符,
服务器都可以全部原样接收到是吗?
换行符和/符,你觉得如何,当然不是任何字符
这个问题我以前遇到过,把“&”单独拿出来就可以比方说http://www.123.com?id=123&num=123;
写成$url='http://www.123.com?id=123'.“&”.'num=123';这样编译器会把它当字符串算不给转换。
转码即可 urlencode()
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录