【问题标题】:PHP cURL how to add the User Agent value OR overcome the Servers blocking cURL requests?PHP cURL 如何添加用户代理值或克服服务器阻止 cURL 请求?
【发布时间】:2013-07-21 23:39:47
【问题描述】:

我正在传输一个对象数组。我有一个 cURL 客户端(提交者)在自己的服务器上在其他服务器上的侦听脚本,这是我无法控制的。然后我认为,他们正在阻止传入的 cURL 请求,因为当我使用普通 HTML <form> 进行测试时,它正在工作。但无论如何都不是通过 cURL。

所以我认为他们对 cURL 做了一些限制。

那么我的问题是:

  1. 服务器能否限制/阻止 cURL 传入请求?
  2. 如果是这样,我可以在启动 cURL 脚本中欺骗/更改 HTTP 标头(用户代理)吗?
  3. 或者还有其他可能的故事吗?

谢谢!

【问题讨论】:

标签: php curl http-headers user-agent


【解决方案1】:
  $agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)';
  $curl=curl_init();
  curl_setopt($curl, CURLOPT_USERAGENT, $agent);

【讨论】:

    【解决方案2】:

    服务器不能只阻止 cURL 请求,因为它们只是 HTTP 请求。因此,更改 cURL 的用户代理可以解决您的问题,因为服务器会认为您是通过 UA 中提供的浏览器进行连接的。

    【讨论】:

      【解决方案3】:
      1. 在服务器端,我们可以通过识别http请求中的头部字段(包括refer、cookie、user-agent等)、ip地址、访问频率来阻止一些请求。而且在大多数情况下,机器产生的请求通常与人的请求不同,例如没有refer&cookie,或者访问频率较高,我们可以编写一些规则来拒绝这些请求。

      2. 根据1,你可以尽量通过填充头部字段来模拟真实的请求,使用随机且较慢的频率,使用更多的ip地址。 (听起来像是攻击)

      3. 一般情况下,使用较低的频率,不给他们的服务器增加负载,遵循他们的访问规则,他们很少会阻止你的请求。

      【讨论】:

      • 是的,对于大部分中小流量来说,通常不值得这样做。但是对于那些负载很重的网站,我看到了很多种过滤流量的方法。
      • 你的矿在一些第三方云提供商上。所以我相信他们会这样做。所以对我来说,我应该要求他们检查什么? :(
      • 只需描述您的问题,并向他们询问过滤规则以及如何避免被拒绝。
      【解决方案4】:

      如果您仍然遇到问题,请执行以下操作。

      1.

      $config['useragent'] = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0';
      
      curl_setopt($curl, CURLOPT_USERAGENT, $config['useragent']);
      curl_setopt($curl, CURLOPT_REFERER, 'https://www.domain.com/');
      

      2.

      $dir                   = dirname(__FILE__);
      $config['cookie_file'] = $dir . '/cookies/' . md5($_SERVER['REMOTE_ADDR']) . '.txt';
      
      curl_setopt($curl, CURLOPT_COOKIEFILE, $config['cookie_file']);
      curl_setopt($curl, CURLOPT_COOKIEJAR, $config['cookie_file']);
      

      注意:您需要在目录中有一个 COOKIES 文件夹。

      3.

      curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      

      如果这样做不能解决问题,请给出示例输入/输出/错误/等。 因此,可以提供更精确的解决方案。

      【讨论】:

        【解决方案5】:

        php 中 curl GET 调用的示例。 ftp 文件中的变量。 解决方案在 Stackoverflow 上......在哪里?!? 不是我的。

        顺便说一句,您需要能够从 html 中执行 php 代码 修改你的 /etc/apache2/mods-enabled' 编辑 '@mime.conf 如果你想这样做... 转到文件末尾并添加以下行:

        "AddType 应用程序/x-httpd-php .html .htm" 之前标签'' 在 'debian' 下使用 'apache 2.4.23' 和 'php 5.6.17-1' 进行验证和测试

        我选择在 html 文件中执行 php,因为开发速度更快。

        示例代码开始:

        <html>
          <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title></title>
          </head>
          <body>
        
          <?php
        
          $host = "https://tgftp.nws.noaa.gov/data/observations/metar/decoded/CYHU.TXT";
          $agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
        
          $curl = curl_init();
          curl_setopt($curl, CURLOPT_URL, $host);
          curl_setopt($curl, CURLOPT_USERAGENT, $agent);
          curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1) ;
          curl_exec($curl);
          $ftp_result=curl_exec($curl);
        
          print_r($ftp_result);
        
          //and the big work commencing,
          //extracting text ...
        
          $zelocation="";
          $zedatetime="";
          $zewinddirection="";
          $zewindspeed="";
          $zeskyconditions="";
          $zetemp="";
          $zehumidity="";
        
          ?>
        
          </body>
        </html>
        

        【讨论】:

          【解决方案6】:

          当我尝试使用 CURL 登录网站时,我遇到了同样的问题,在我发送 user-agent 标头和进入登录页面时返回的 cookie 之前,服务器拒绝了我的请求,但是,你如果你不熟悉 curl,可以使用这个curl library

          $curl = new Curl();
          
          $curl->setHeaders('user-agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0');
          
          // Disable SSL verification
          $curl->setOpt(CURLOPT_SSL_VERIFYPEER, '0');
          
          $curl->post($url, $data);
          
          $response = $curl->getRawResponse();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-12
            • 2017-09-01
            • 1970-01-01
            • 2011-11-19
            • 2016-03-08
            • 2015-03-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多