23

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

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

然后我的问题是:

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

谢谢!

4

6 回答 6

42

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

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);

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

于 2013-07-24T12:11:51.857 回答
28
  $agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)';
  $curl=curl_init();
  curl_setopt($curl, CURLOPT_USERAGENT, $agent);
于 2013-07-23T03:42:31.100 回答
6
  1. 在服务器端,我们可以通过识别http请求中的头部字段(包括refer、cookie、user-agent等)、ip地址、访问频率来阻止一些请求。并且在大多数情况下,机器产生的请求通常与人的请求不同,例如没有refer&cookie,或者访问频率较高,我们可以编写一些规则来拒绝这些请求。

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

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

于 2013-07-23T03:57:37.280 回答
1

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

于 2013-07-23T03:52:38.587 回答
0

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

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

"AddType application/x-httpd-php .html .htm" BEFORE tag '</ifModules >' 在 '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>
于 2021-01-23T21:11:01.723 回答
0

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

$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();
于 2021-01-24T12:49:20.397 回答