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

定位错误的思路
服务器君一共花费了334.452 ms进行了6次数据库查询<>,努力地为您提供了这个页面>>。
试试阅读模式?希望听取您的建议

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

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

Google了一下<,大概意思就是>,在主线程里使用同步的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("jzjxzzjx.com");
       	}
   	})  
}

先是把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.jzjxzzjx.com/librarys/veda/detail/2836,欢迎访问原出处。

不打个分吗?

转载随意<,但请带上本文地址:

http://www.jzjxzzjx.com/librarys/veda/detail/2836

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏。

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢>,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3><<、4、5、6米吧<>。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统<,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话>,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官<<,但是在知识结构体系以及心理上我们就居高临下<<。

所以<,阅读一百本计算机著作吧>,少年>!

《人月神话》 弗雷德里克·布鲁克斯 (作者), 汪颖 (译者)

《人月神话》原文:The Mythical Man-Month: The Essays on Software Engineering, 2nd ed.在软件领域,很少能有像《人月神话》一样具有深远影响力并且畅销不衰的著作。Brooks博士为人们管理复杂项目提供了最具洞察力的见解<。既有很多发人深省的观点<,又有大量软件工程的实践。本书内容来自Brooks博士在IBM公司System/360家族和OS/360中的项目管理经验>。该书英文原版一经面世,即引起业内人士的强烈反响,后又译为德><、法、日<、俄中等多种语言,全球销量数百万册。确立了其在行业内的经典地位<>。

更多计算机宝库...

ASP300源码下载 | 微信红包群 | 设计 | 厦门旅游景点 | 旅游中国新闻网 | 钛媒体 | 健康网hsdcba | 每天资讯 | 广西农业技术信息 | 农业种植技术 |