我已经在我的服务器上设置了 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 代码中,当您更改 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);
?>