目录
网页抓取 - php用curl抓取网页问题
Sep 23, 2016 am 11:31 AM
curl
php
网页抓取
<code>封装了一个curl抓取网页的函数,在本地测没问题;放到测试服务器上后,如果通过浏览器访问 执行,大部分时候函数返回的HTTP状态码返回0,错误信息`Error:name lookup timed out`,极其偶像的情况下返回200成功;但如果直接在测试服务器上直接用命令行执行,100%成功。 代码如下:</code>
登录后复制
登录后复制
<code>static public function curlGet($url, $data = array(), $header = array(), $timeout = 3, $port = 80) { $is_ssl = substr($url, 0, 5) == 'https' ? 1 : 0; $ch = curl_init(); if (!empty($data)) { $data = is_array($data)?http_build_query($data): $data; $url .= (strpos($url,'?')? '&': "?") . $data; } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳转后的页面 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_POST, 0); //curl_setopt($ch, CURLOPT_PORT, $port); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_REFERER, $url); // curl_setopt($ch, CURLOPT_USERAGENT, self::url2useragent($url)); if($is_ssl){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在 } $result = array(); $result['result'] = curl_exec($ch); $result['http_code'] = curl_getinfo($ch,CURLINFO_HTTP_CODE); if (0 != curl_errno($ch)) { $result['error'] = "Error:\n" . curl_error($ch); } curl_close($ch); return $result; }</code>
登录后复制
登录后复制
<code>我个人感觉和代码应该关系不大,不知是哪的问题。望各路大神不吝赐教,指点迷津,不胜 感激。</code>
登录后复制
登录后复制
回复内容:
<code>封装了一个curl抓取网页的函数,在本地测没问题;放到测试服务器上后,如果通过浏览器访问 执行,大部分时候函数返回的HTTP状态码返回0,错误信息`Error:name lookup timed out`,极其偶像的情况下返回200成功;但如果直接在测试服务器上直接用命令行执行,100%成功。 代码如下:</code>
登录后复制
登录后复制
<code>static public function curlGet($url, $data = array(), $header = array(), $timeout = 3, $port = 80) { $is_ssl = substr($url, 0, 5) == 'https' ? 1 : 0; $ch = curl_init(); if (!empty($data)) { $data = is_array($data)?http_build_query($data): $data; $url .= (strpos($url,'?')? '&': "?") . $data; } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳转后的页面 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_POST, 0); //curl_setopt($ch, CURLOPT_PORT, $port); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_REFERER, $url); // curl_setopt($ch, CURLOPT_USERAGENT, self::url2useragent($url)); if($is_ssl){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在 } $result = array(); $result['result'] = curl_exec($ch); $result['http_code'] = curl_getinfo($ch,CURLINFO_HTTP_CODE); if (0 != curl_errno($ch)) { $result['error'] = "Error:\n" . curl_error($ch); } curl_close($ch); return $result; }</code>
登录后复制
登录后复制
<code>我个人感觉和代码应该关系不大,不知是哪的问题。望各路大神不吝赐教,指点迷津,不胜 感激。</code>
登录后复制
登录后复制
1.超时时间设置大点;
2.重启服务器;
3.检查DNS是否正常
你服务器抽风了
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌

热门文章
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发
