PHP cURL如何添加用户代理值或克服服务器阻塞cURL请求的问题?

PHP cURL如何添加用户代理值或克服服务器阻塞cURL请求的问题?,php,curl,http-headers,user-agent,Php,Curl,Http Headers,User Agent,我正在传输一个对象数组。我在自己的服务器上有一个cURL客户端(提交者),在其他服务器上有一个侦听脚本,但我无法控制该脚本。然后我想,他们正在阻止传入的cURL请求,因为当我使用正常的HTML进行测试时,它正在工作。但无论如何,不是通过卷曲 所以我认为他们对卷曲做了一些限制 那么我的问题是: 服务器能否限制/阻止传入请求 如果是这样,我可以在启动cURL脚本中欺骗/更改HTTP头(用户代理)吗 或者还有其他可能的故事吗 谢谢 服务器无法仅阻止cURL请求,因为它们只是HTTP请求。所以,更改cU

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

所以我认为他们对卷曲做了一些限制

那么我的问题是:

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

  • 谢谢

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

      $agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)';
      $curl=curl_init();
      curl_setopt($curl, CURLOPT_USERAGENT, $agent);
    
  • 在服务器端,我们可以通过识别http请求中的头字段(包括引用、cookie、用户代理等)、ip地址、访问频率来阻止某些请求。在大多数情况下,机器生成的请求通常与人工请求不同,例如,no-refere&cookie,或者使用更高的访问频率,我们可以编写一些规则来拒绝这些请求

  • 根据1,您可以通过填充头字段,使用随机和较慢的频率,使用更多的ip地址,尽最大努力模拟真实的请求。(听起来像是攻击)

  • 一般来说,使用较低的频率,不会给他们的服务器带来沉重的负载,遵循他们的访问规则,他们很少会阻止你的请求


  • 如果您仍然面临问题,请执行以下操作

    一,

    二,

    注意:目录中需要一个COOKIES文件夹

    三,

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

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

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

    “AddType应用程序/x-httpd-php.html.htm” 在标记“”之前 使用“debian”下的“Apache2.4.23”和“PHP5.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>
    

    我在尝试使用CURL登录网站时遇到了同样的问题,服务器拒绝了我的请求,直到我发送了
    用户代理
    标题和进入登录页面时返回的cookies,但是,如果您不熟悉CURL,可以使用此选项

    $curl=newcurl();
    $curl->setHeaders('user-agent'、'Mozilla/5.0(windowsnt 6.1;Win64;x64;rv:84.0)Gecko/20100101 Firefox/84.0');
    //禁用SSL验证
    $curl->setOpt(CURLOPT_SSL_VERIFYPEER,'0');
    $curl->post($url,$data);
    $response=$curl->getRawResponse();
    
    你的名字很有趣。@srain LOL:D在这里,很抱歉不讲主题,但它实际上是中文的LOL!很抱歉我也离题了。但就连我也注意到,我的名字是用两种语言写的:dmaeans夏季派对?:-)是的,对于大多数中小型流量来说,这样做通常是不值得的。但是对于那些负载很重的站点,我看到了很多种过滤流量的方法。所以我相信他们会这么做。那么对我来说,我应该让他们检查什么呢(只需描述您的问题,并询问他们有关筛选规则以及如何避免被拒绝。
    $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']);
    
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
    <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>