文档章节

一次对HTTPS页面抓取的报错发现过程

ywppengpeng
 ywppengpeng
发布于 2016/11/22 09:42
字数 593
阅读 18
收藏 0

今天发现系统后台的某个抓取页面突然失效了,提示:

Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.

大概意思就是,在主线程里使用同步的ajax请求对用户体验有影响,所以不让用了。

于是修改一下抓取函数:

function getProcessData(url)
	{
	    $.ajax({ 
	        type: "get",        //使用get方法访问后台 
	        dataType: "jsonp",  //返回json格式的数据 
	        jsonp:"callback",
	        url: '/news_spider_process/',  // 跨域URL  
	        //url: 'http://localhost/test.php',  // 跨域URL  
	        data:{"url":url},
	        //async: false,
	        //async: true,
	        error: function (jqXHR, exception) {
	            var msg = '';
	            //alert(jqXHR.status);
	            //alert(jqXHR.responseText);
	            if (jqXHR.status === 0) {
	                msg = 'Not connect.\n Verify Network.';
	            } else if (jqXHR.status == 404) {
	                msg = 'Requested page not found. [404]';
	            } else if (jqXHR.status == 500) {
	                msg = 'Internal Server Error [500].';
	            } else if (exception === 'parsererror') {
	                msg = 'Requested JSON parse failed.';
	            } else if (exception === 'timeout') {
	                msg = 'Time out error.';
	            } else if (exception === 'abort') {
	                msg = 'Ajax request aborted.';
	            } else {
	                msg = 'Uncaught Error.\n' + jqXHR.responseText;
	            }
	            //$('#content').html(msg);
	        },
	        success: function(data){
	            //alert(data.url);
	            $("#news_title").val(data.url);
	            //$("#title").html(data.url);
	            //$("#tagA").html("333");
	            re = new RegExp("\/p>","g");
	            $("#tagA").html(data.content.replace(re,"/p>\n"));
	            $("#news_creater").val("nowamagic.net");
	        }
	    }) 
	}

先是把async: false注释掉,发现抓取依然是不行。照理这个是警告,不会阻止程序的运行才对的。

于是加上$.ajax的error选项,发现jqXHR.status输出 200,就是网络是通的。而jqXHR.responseText返回了一处PHP报错,定位到错误处,发现$array file_get_contents($url); 报错了。之前一直都是正常的,怎么突然报错了呢?去那个网页一看,发现网页已经全部用上HTTPS了。

如何让抓取支持HTTPS呢?这里环境是xampp,就以这个为例。

首先,检查/xampp/php/ext目录下是否存在php_openssl.dll文件,一般是有的,没有就需要另行下载。

然后/xampp/php/php.ini文件,查找extension=php_openssl.dll,如果找到了,去掉前面的分号;如果没找到就在extension=php_curl.dll的下一行添加如下代码:extension=php_openssl.dll,然后重启Apache就行了。

打开phpinfo(),查看一下openssl是否已正常启用,当正常启用时,在OpenSSL support后面会出现enabled。

或者用下面的语句判断openssl的启用情况:

$w = stream_get_wrappers();
echo 'openssl: ',  extension_loaded  ('openssl') ? 'yes':'no', PHP_EOL;
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', PHP_EOL;
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', PHP_EOL;
echo 'wrappers: ', var_export($w);

现在后台抓取又重新正常,问题解决很容易,就是在发现问题上花的时间长了。

本文转载自:http://www.nowamagic.net/librarys/veda/detail/2836

共有 人打赏支持
ywppengpeng
粉丝 5
博文 63
码字总数 32377
作品 0
西安
程序员
Go爬虫框架--go_spider

本项目基于golang开发,是一个开放的垂直领域的爬虫框架,框架中将各个功能模块区分开,方便使用者重新实现子模块,进而构建自己垂直方方向的爬虫。 本项目将爬虫的各个功能流程区分成Spide...

hucong
2014/12/01
5.8K
0
java爬虫进阶篇(半小时知乎两万推荐问题)

上一篇写了一个简单的新浪新闻爬虫作为上手主要是用jsoup包来对url页面进行抓取到本地,并在本地进行数据的解析提取。这里就不重复叙述jsoup的用法了,百度一下基本一大片。看了网上大神们都...

xixi哈哈1
2017/12/31
0
0
网络爬虫的抓取策略:深度抓取策略、广度优先遍历策略、Partial PageRank策略、OCIP策略、大站优先策略

前言 遍历策略是爬虫的核心问题,在爬虫系统中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面...

扶七
05/10
0
0
对各种编码及压缩的页面内容抓取程序PHP

项目中经常用到页面抓取的功能,页面抓取的过程往往会出现两种常见的问题 1、页面编码不统一,本地是utf-8,抓取的页面是gbk等,导致抓取过来的出现乱码 2、有些网站用了压缩技术,针对页面进...

lock-li
2016/04/22
36
0
【文智背后的奥秘】系列篇——分布式爬虫之WebKit

版权声明:本文由文智原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/139 来源:腾云阁 https://www.qcloud.com/community 引子: 文智平台是利用并行计...

偶素浅小浅
2016/11/06
21
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring IOC实现原理

1、BeanDefinition 对依赖翻转模式中管理对象依赖关系的数据抽象 实现依赖翻转功能的核心数据结构 依赖翻转功能都是围绕对BeanDefinition 处理完成的 有了这些BeanDefinition 基础数据结构,...

职业搬砖20年
21分钟前
1
0
Python判断变量的数据类型的两种方法

1、isinstance(变量名,类型) def varargsql(self, sql, *args): if isinstance(args, tuple): self.cursor.execute(sql, args) self.conn.commit() 2、通过与其他已......

fang_faye
21分钟前
1
0
xml 转义特殊字符

XML中共有5个特殊的字符,分别是:&<>“’。如果配置文件中的注入值包括这些特殊字符,就需要进行特别处理。有两种解决方法:其一,采用本例中的特殊标签,将包含特殊字符的字符串封装起来;...

inidcard
22分钟前
1
0
Mysql中哪些sql 不会走索引

1. 索引列参与了计算 SELECT `sname` FROM `stu` WHERE `age`+10=30; 2. 索引使用了函数运算 SELECT `sname` FROM `stu` WHERE LEFT(`date`,4) <1990; 3. like SELECT * FROM `houdunwang` W......

ChyiHuang
31分钟前
2
0
nginx 504 Gateway Time-out

打开nginx.config: 参数介绍: #设定http服务器http{include mime.types; #文件扩展名与文件类型映射表default_type application/octet-stream; #默认文件类型#charset utf-8; #默...

lyle_luo
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部