文档章节

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

ywppengpeng
 ywppengpeng
发布于 2016/11/22 09:42
字数 593
阅读 29
收藏 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);

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

ywppengpeng
粉丝 5
博文 63
码字总数 32377
作品 0
西安
程序员
私信 提问
加载中
请先登录后再评论。
Python爬虫入门教程 4-100 美空网未登录图片爬取

美空网未登录图片----简介 上一篇写的时间有点长了,接下来继续把美空网的爬虫写完,这套教程中编写的爬虫在实际的工作中可能并不能给你增加多少有价值的技术点,因为它只是一套入门的教程,...

osc_resa95yg
2018/12/17
2
0
新手上路,记录下第一次使用异步协程爬取代理数据为自己构建一个低级版的本地代理池的过程

目录 [TOC] 使用的主要库及工具 一.内容简介 分析网页代码,爬取网页信息(爬取10页信息); 体验下利用不同的解析库来获取代理(和类型); 对获取的代理进行测试筛选; 将筛选成功的代理存...

osc_7izxyaq6
04/16
4
0
Python爬虫入门教程【4】:美空网未登录图片爬取

美空网未登录图片----简介 上一篇写的时间有点长了,接下来继续把美空网的爬虫写完,这套教程中编写的爬虫在实际的工作中可能并不能给你增加多少有价值的技术点,因为它只是一套入门的教程,...

计算机编程
2019/07/25
1
0
Go爬虫框架--go_spider

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

hucong
2014/12/01
7.9K
0
无需编程的爬虫 - 爬取京东的评论

【原创】转载请注明作者Johnthegreat和本文链接 做电商时,消费者对商品的评论是很重要的,但是不会写代码怎么办?这里有个Chrome插件可以做到简单的数据爬取,一句代码都不用写。下面给大家...

osc_2y6i16fz
04/23
21
0

没有更多内容

加载失败,请刷新页面

加载更多

插入,在PostgreSQL中重复更新吗? - Insert, on duplicate update in PostgreSQL?

问题: Several months ago I learned from an answer on Stack Overflow how to perform multiple updates at once in MySQL using the following syntax: 几个月前,我从关于堆栈溢出的答案......

技术盛宴
8分钟前
0
0
互联网的寒冬下各大一线互联网公司还在用SpringBoot这是为什么?

引言 现在各大技术社区 Spring Boot 的文章越来越多,Spring Boot 相关的图文、视频教程越来越多,使用 Spring Boot 的互联网公司也越来越多; Java 程序员现在出去面试, Spring Boot 已经成...

北柠Java
11分钟前
8
0
vue+elementui实现简易的列筛选功能实现。

一、简易效果图: 二、需求背景 大家都知道,后管类系统当中,有时一个列表可能有很多列需要展示,如下图所示,但是用户在使用系统的时候,往往会需要针对其中某几列进行数据提取,在展示列比...

一生懸命吧
14分钟前
28
0
批处理问题记录——数字实验bat

记录学习批处理时的问题 批处理为输入一个数字,如果大于等于一百,直接输出输入数字,如果小于一百会重复+1,直到100后输出。 问题是,如果不输入数字,直接空格的话,批处理会出错。 寻求一...

愤怒的乌老大
20分钟前
6
0
算法题汇总

计算两个字符串中的最大的相同字符串

佳幂小煜
30分钟前
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部