求助php无法抓取网页,问了几个人都没解决 本帖最后由 dz215136304 于 2013-06-11 11:35:47 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以先看看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\nheader不正确的话,服务器端返回错误(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 编码的数据”吗?怎么我理解的是服务器只能接受经过url编码的数据呢,如果我们直接把带空格的地址在浏览器打开,那浏览器已经自动把url编码了,所以打开正常,但是php并不是浏览器,所以它不会自动做这些事情,需要手动进行编码,难道不是这样的吗? 服务器可以接受“未经 url 编码的数据”吗?怎么我理解的是服务器只能接受经过url编码的数据呢,如果我们直接把带空格的地址在浏览器打开,那浏览器已经自动把url编码了,所以打开正常,但是php并不是浏览器,所以它不会自动做这些事情,需要手动进行编码,难道不是这样的吗?空格符(\x20)是url合法字符,怎么处理视乎服务器你做过http socket的话就知道了,header发送带空格的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 编码的数据”吗?怎么我理解的是服务器只能接受经过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';这样编译器会把它当字符串算不给转换。 php连接不上mysql,但Nvicat可以。 电脑已经安装MySQL了,如何安装wamp5,或者在此基础上安装PHP? 关于php和javascrip混合在一起 php编程高手,请帮忙解决一个问题: xampp怎么自动开启https [正则疑难]怎么在preg_match_all中进行行首匹配 如何用PHP获得浏览者真实的IP,用这些函数真能得到?大家试过? 我郁闷了呀:( 一个正则表达式的问题 PHP,preg_match 文件上传后,怎么让它自动解压缩?谁有这方面的代码 哪位大哥有空来帮个忙!?谢谢。 请问如何根据某个特定字段column的值查询所在的库和表? php问题
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));
}
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 编码的数据”吗?
怎么我理解的是服务器只能接受经过url编码的数据呢,
如果我们直接把带空格的地址在浏览器打开,
那浏览器已经自动把url编码了,
所以打开正常,
但是php并不是浏览器,
所以它不会自动做这些事情,
需要手动进行编码,
难道不是这样的吗?
服务器可以接受“未经 url 编码的数据”吗?
怎么我理解的是服务器只能接受经过url编码的数据呢,
如果我们直接把带空格的地址在浏览器打开,
那浏览器已经自动把url编码了,
所以打开正常,
但是php并不是浏览器,
所以它不会自动做这些事情,
需要手动进行编码,
难道不是这样的吗?
空格符(\x20)是url合法字符,怎么处理视乎服务器
你做过http socket的话就知道了,header发送带空格的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 编码的数据”吗?
怎么我理解的是服务器只能接受经过url编码的数据呢,
如果我们直接把带空格的地址在浏览器打开,
那浏览器已经自动把url编码了,
所以打开正常,
但是php并不是浏览器,
所以它不会自动做这些事情,
需要手动进行编码,
难道不是这样的吗?
空格符(\x20)是url合法字符,怎么处理视乎服务器
你做过http socket的话就知道了,header发送带空格的url一般也是可接受的
那就是说查询字符串不管是什么字符,
服务器都可以全部原样接收到是吗?
换行符和/符,你觉得如何,当然不是任何字符
写成$url='http://www.123.com?id=123'.“&”.'num=123';这样编译器会把它当字符串算不给转换。