我已经在我的服务器上设置了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个参数时,您实际上是在try 以一种特定于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);
?>

Php相关问答推荐

创建一个新的可变产品及其属性以用于WooCommerce中的变体

使用随机生成器在MYSQL中创建唯一ID-定义一个数组来存储已知ID是否安全

重命名 WordPress 中现有的自定义分类法名称和标签

在 WooCommerce 中应用优惠券时显示购物车商品折扣金额

Symfony:从控制器内部调用自定义命令

WooCommerce 相关产品(按 children 类别)作为排名数学主要类别的后备

如何判断php中wordpress路径之外的文件夹是否存在?

如何为自定义帖子类型的自定义角色提供功能

无法使用 slim 的父级容器

为什么 debug_backtrace() 不返回任何内容?

设置GA4 PHP API的setSubject以允许访问所有管理员账户属性

WooCommerce – 在新订单邮箱通知中显示产品分类计数

正则表达式请帮我从内容中找到这个词

为什么在 phpunit 的开头测试 PHP_VERSION?

如何在供应商名称后将自定义徽章添加到商品详情

使用 PHP 有条件地使用关键字 Twilio Programmable SMS

Laravel - 按 SQL 表列对来自其他类的数组进行排序

Laravel updateOrCreate 方法 - 更新你匹配的同一列

PhpStorm 代码风格:对齐函数括号

表单操作未触发,而是重定向到 php 脚本