使用 Schedule.json 将 PHP 中的 CURL 转换为 SCRAPYD 不返回任何内容

问题描述 投票:0回答:1

我已经在我的服务器上设置了 Scrapyd,一切似乎都工作正常。我可以使用 CURL 来获取我的蜘蛛列表,就像这样

curl -u super:secret http://111.111.111.111:6800/listspiders.json?project=myproject
。我还可以使用
curl -u super:secret http://111.111.111.111:6800/schedule.json -d project=myproject -d spider=spider1
启动蜘蛛。

现在我想从 PHP 中执行此操作。第一个 CURL 命令工作正常:

<?php
  $username='super';
  $password='secret';
  
  $ch = curl_init();
  
  $url = 'http://111.111.111.111:6800/listspiders.json?project=myproject';
  #$url = "http://111.111.111.111:6800/schedule.json -d project=myproject -d spider=spider1";
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
  curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
  curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
  
  $response = curl_exec($ch);
  echo 'Type ($response): '.gettype($response). "<br/>";
  echo 'Response: '.$response;

  curl_close($ch);
?>

这将返回预期的响应:

{"node_name": "ubuntu-s-1vcpu-512mb-10gb-fra1-01", "status": "ok", "spiders": ["spider1", "spider2"]}

但是,当我将上面代码片段中的 URL 更改为

$url = "http://111.111.111.111:6800/schedule.json -d project=myproject -d spider=spider1";
时,我没有得到 any 响应。没有错误,什么都没有。
gettype($response)
返回
boolean
,无论其价值如何。

再次,使用终端时,CURL 命令工作正常并返回类似

{"node_name": "ubuntu-s-1vcpu-512mb-10gb-fra1-01", "status": "ok", "jobid": "6a885343fa8233a738bb9efa11ec2e94"}

的内容

非常感谢任何关于这里发生的事情的提示,或者更好的解决问题的方法。

php curl scrapy scrapyd
1个回答
0
投票

在 PHP 代码中,当您更改 URL 以包含

-d
参数时,您实际上是在尝试以
command-line cURL
特有的方式发送数据,而不是
PHP cURL
。希望以下内容对您有所帮助。

<?php
$username = 'super';
$password = 'secret';

$ch = curl_init();

$url = 'http://111.111.111.111:6800/schedule.json';

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'project' => 'myproject',
    'spider' => 'spider1'
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

$response = curl_exec($ch);

if ($response === false) {
    echo 'Curl error: ' . curl_error($ch);
}

echo 'Type ($response): ' . gettype($response) . "<br/>";
echo 'Response: ' . $response;

curl_close($ch);
?>
© www.soinside.com 2019 - 2024. All rights reserved.