一次火车采集器和file_get_contents都无法抓取的解决办法

        小编的网站使用帝国cms制作,之前由于需要进行大量数据计算,所以使用火车采集器抓取网站信息列表,获取到信息列表后再从其他服务器上进行计算,以此分担主服务器计算压力。

        最近由于更换了主服务器,抓取服务器上的火车采集器无法再成功获取信息,通过火车采集器的测试工具抓取,返回信息如下:

折叠XML/HTML 代码
  1. System.NullReferenceException: 未将对象引用设置到对象的实例。  
  2.    在 Lv.Http.HttpProc.Proc(HttpWebRequest OO00O1l00OO0l)  
  3.    在 Lv.Http.HttpProc.Proc()  
  4. Void Proc(System.Net.HttpWebRequest)  

        接下来小编使用php的file_get_contents()方法尝试获取,提示错误信息如下。

折叠XML/HTML 代码
  1. Warning: file_get_contents(https://www.yanglaoditu.com) [function.file-get-contents]: failed to open stream: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? in D:\EmpireServer\web\aa.php on line 2  

        以此怀疑可能是服务器的openssl配置出了问题,服务器使用宝塔面板php5.3,查看php.ini发现无openssl配置,更加坚定的认为是服务器openssl配置有误,接下来通过phpinfo()打印服务器配置,发现openssl是正常开启的。

        这就有些摸不到头脑了,接下来小编怀疑是ssl证书相关配置原因,因为服务器上开启https的网站都出现了该问题,但未开启ssl的网站抓取都是正常的。

        小编换了一台机器再次尝试使用file_get_contents()方法获取,错误信息如下:

折叠XML/HTML 代码
  1. PHP Warning:  file_get_contents() [<a href='function.file-get-contents'>function.file-get-contents</a>]: SSL operation failed with code 1. OpenSSL Error messages:  
  2. error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version in C:\wwwroot\spiderserver\aa.php on line 2  
  3. PHP Stack trace:  
  4. PHP   1. {main}() C:\wwwroot\spiderserver\aa.php:0  
  5. PHP   2. file_get_contents() C:\wwwroot\spiderserver\aa.php:2  
  6. PHP Warning:  file_get_contents() [<a href='function.file-get-contents'>function.file-get-contents</a>]: Failed to enable crypto in C:\wwwroot\spiderserver\aa.php on line 2  
  7. PHP Stack trace:  
  8. PHP   1. {main}() C:\wwwroot\spiderserver\aa.php:0  
  9. PHP   2. file_get_contents() C:\wwwroot\spiderserver\aa.php:2  
  10. PHP Warning:  file_get_contents(https://www.yanglaoditu.com) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: operation failed in C:\wwwroot\spiderserver\aa.php on line 2  
  11. PHP Stack trace:  
  12. PHP   1. {main}() C:\wwwroot\spiderserver\aa.php:0  
  13. PHP   2. file_get_contents() C:\wwwroot\spiderserver\aa.php:2  

        通过报告看出是SSL允许版本的问题,查看网站配置文件,SSL部分配置如下:

折叠XML/HTML 代码
  1. #SSL  
  2. SSLEngine On  
  3. SSLProtocol All -SSLv2 -SSLv3 -TLSv1  
  4. SSLHonorCipherOrder On  

        这下就明确了,是宝塔默认配置的SSL配置与线上SSL证书不符造成的,去掉-TLSv1后网站恢复正常。

Tags: 火车   采集   抓取
cms大学,为帝国cms用户提供动力
Copyright © 2016 CmsDX.com All Rights Reserved.