curl在有效页面

时间:2016-11-18 13:41:42

标签: php curl

我有一个PHP函数,用于检查URL以确保(a。)存在某种服务器响应,并且(b。)它不是404。

它在我测试过的每个域/网址上运行得很好,但bostonglobe.com除外,它返回404有效网址。我猜这与他们的付费墙有关,但我的功能在nytimes.com和其他报纸网站上运行良好。

以下是返回404的示例网址:

https://www.bostonglobe.com/news/politics/2016/11/17/tom-brady-was-hoping-get-into-politics-might-time/j2X1onOLYc4ff2LpmM5k9I/story.html

我做错了什么?

function check_url($url){
  $userAgent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';
  $curl = curl_init($url);
  curl_setopt($curl, CURLOPT_NOBODY, true);
  curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
  curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
  $result = curl_exec($curl);
  if ($result == false) {
      //There was no response
      $message = "No information found for that URL";
      } else {
      //What was the response?
      $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  
      if ($statusCode == 404) {
        $message = "No information found for that URL";
        } else{
        $message = "Good";
        }
      }
  return $message;
  }

2 个答案:

答案 0 :(得分:2)

问题似乎来自你CURLOPT_NOBODY选项。

我已使用和不使用此行测试您的代码,http代码在404出现时返回CURLOPT_NOBODY,而200则不在。CURLOPT_NOBODY

PHP manual通知我们设置HEAD选项会将您的请求方法转换为{{1}},我的猜测是托管bostonglobe.com的服务器不会支持这种方法。

答案 1 :(得分:-1)

我用curl命令检查了这个URL。

AppDomain CreateUnsharingDomain()
{
    AppDomain cad = AppDomain.CurrentDomain;
    AppDomainSetup cads = cad.SetupInformation;
    return AppDomain.CreateDomain("Dummy", cad.Evidence,
        new AppDomainSetup
        {
            ApplicationName = cads.ApplicationName,
            ApplicationBase = cads.ApplicationBase,
            DynamicBase = cads.DynamicBase,
            CachePath = cads.CachePath,
            PrivateBinPath = cads.PrivateBinPath,
            ShadowCopyDirectories = cads.ShadowCopyDirectories,
            ShadowCopyFiles = cads.ShadowCopyFiles,
            ApplicationTrust = cads.ApplicationTrust,
            LoaderOptimization = LoaderOptimization.SingleDomain
        });
        //Not sure which other properties to copy...
}

CreateUnsharingDomain().DoCallBack(MyUWPDependentMethod);

它返回了一个错误。(HTTP / 1.1 404 Not Found)

我还使用了另一个命令wget。结果是一样的。

curl --head https://www.bostonglobe.com/news/politics/2016/11/17/tom-brady-was-hoping-get-into-politics-might-time/j2X1onOLYc4ff2LpmM5k9I/story.html

我还使用Web服务(HTTP请求生成器:http://web-sniffer.net/)检查了这种情况。 结果是一样的。

https://www.bostonglobe.com/中的其他网址个案仅适用于HEAD请求。 但我认为帖子页面(扩展名.html)不支持头部请求。

服务器管理员或程序员关闭头请求?

for php,

wget –server-response --spider https://www.bostonglobe.com/news/politics/2016/11/17/tom-brady-was-hoping-get-into-politics-might-time/j2X1onOLYc4ff2LpmM5k9I/story.html

或服务器软件(Apache及更多)限制HTTP请求。

例如,

目的是减少服务器负载。