为什么我无法通过php cURL抓取远程站点数据?

时间:2019-12-24 05:49:48

标签: php curl

我曾经通过php cURL从远程网站抓取数据。现在,我什至可以从除一页之外的所有其他页面中抓取数据。 php cURL的标题显示如下:

HTTP/1.1 200 OK Date: Tue, 24 Dec 2019 05:44:17 GMT Server: Apache Content-Length: 14 Content-Type: text/html; charset=UTF-8 X-XSS-Protection: 1;mode=block X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade Strict-Transport-Security: max-age=31536000;includeSubDomains;preload X-Frame-Options: sameorigin

任何人都知道为什么会发生这种情况以及解决方案是什么?

1 个答案:

答案 0 :(得分:0)

我也不是专家,但是当我对返回的标头的所有子组件进行简单的Google搜索时,便发现了这一点:

第1部分:class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int output[m+n] = {0}; int i = 0; int j = 0; int k = 0; if(m == 0) // nums1 is empty. Ex. nums1[0,0],m=0 and nums2[1,2],n=2 { for(i = 0; i < n; i++) { nums1[i] = nums2[i]; } return; } if(n == 0) // nums2 is empty. Ex. nums1[1,2],m=2 and nums2[],n=0 { return; } for(k = 0; k < m+n; k++) { if(i>=m || j>=n) // Check if we've exhausted any of nums1 or nums2 list break; if(nums1[i] <= nums2[j]) // if nums1[i] <= nums2[j] { output[k] = nums1[i]; i++; } else{ // else, nums1[i] > nums2[j] output[k] = nums2[j]; j++; } } while(i<m){ // If some elements are left in nums1. Ex: nums1[4,0,0],m=1 and nums2[1,2],n=2 output[k] = nums1[i]; i++; k++; } while(j<n){ // If some elements are left in nums2. Ex: nums1[1,2,0],m=2 and nums2[4],n=1 output[k] = nums2[j]; j++; k++; } for(i = 0; i < m+n; i++) // Copy back to nums1 { nums1[i] = output[i]; } } }; :此标头用于防止跨站点脚本攻击。 MDN documentation指出:

  

启用XSS过滤。如果检测到攻击,浏览器不会清除页面,而是阻止呈现页面。

第2部分:X-XSS-Protection: 1;mode=block:此标头可防止基于MIME的攻击。 MDN documentation指出:

  

此标头是Microsoft在IE 8中引入的,它是网站管理员用来阻止正在发生的内容嗅探的一种方法,该方法可以将不可执行的MIME类型转换为可执行的MIME类型。从那以后,即使他们的MIME嗅探算法不太积极,其他浏览器也引入了它。

第3部分:X-Content-Type-Options: nosniff:MDN documentation指出:

  

当协议安全级别保持不变(HTTP→HTTP,HTTPS→HTTPS)或提高(HTTP→HTTPS)但不发送时,URL的起源,路径和查询字符串将作为引荐来源发送安全目标(HTTPS→HTTP)。

第4部分:Referrer-Policy: no-referrer-when-downgrade:此标头可防止中间人攻击。 MDN documentation指出:

  

HTTP严格传输安全标头通知浏览器,它永远不要使用HTTP加载网站,而应自动将所有使用HTTP访问该网站的尝试转换为HTTPS请求。

第5部分:Strict-Transport-Security: max-age=31536000;includeSubDomains;preload:此标头用于防止点击劫持攻击。 MDN documentation指出:

  

X-Frame-Options HTTP响应标头可用于指示是否应允许浏览器以X-Frame-Options: sameorigin<frame><iframe>或{ {1}}。网站可以通过确保其内容未嵌入其他网站来避免点击劫持攻击。

因此,请确保您没有发生上述任何错误(例如,加载页面的非https版本或嗅探MIME标头等),并且应该很好地加载页面的内容。