如何复制此 mpv socat 命令但作为 PHP 8.2 cURL 请求?

How to replicate this mpv socat command but as a PHP 8.2 cURL request?

提问人:user20986345 提问时间:10/20/2023 最后编辑:user20986345 更新时间:10/20/2023 访问量:31

问:

我正在尝试使用 mpv 的 API。我遵循了这个: https://mpv.io/manual/master/#json-ipc

  1. 我从 mpv 开始: .mpv /path/to/file.mkv --input-ipc-server=/tmp/mpvsocket
  2. 我在终端中运行,它有效(返回 JSON 输出)。echo '{ "command": ["get_property", "playback-time"] }' | socat - /tmp/mpvsocket

现在我花了无数个小时无法将其复制为 PHP 8.2 cURL 代码。这只是我尝试过的众多不同变体中的最新一种。是的,我尝试过在没有 、 和 不使用 JSON 编码的情况下使用它,以及几乎所有有人可以建议的“明显”的东西。它们都不起作用。CURLOPT_URL

$POST_data =
[
    'command'   => [ "get_property", "playback-time" ]
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '/tmp/mpvsocket');
curl_setopt($ch, CURLOPT_UNIX_SOCKET_PATH, '/tmp/mpvsocket');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($POST_data));
//curl_setopt($ch, CURLOPT_ABSTRACT_UNIX_SOCKET, '/tmp/mpvsocket');
curl_setopt($ch, CURLOPT_VERBOSE, true);
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);
var_dump(curl_error($ch));

输出为:

* Closing connection -1
bool(false)
string(0) ""

上下文:Debian Linux。PHP 8.2 中。

我从同一种代码发出 HTTP(S) 请求,即使是对 localhost 的请求,也没有问题。这似乎只有在涉及“Unix 套接字”时才有问题。但是PHP的cURL早就支持这一点,所以它没有任何意义。是的,我已经检查过了,所以存在。/tmp/mpvsocket

可能出了什么问题?

php linux curl unix-socket mpv

评论

0赞 ADyson 10/20/2023
您从哪里了解到 cURL 支持 IPC 协议?我在这里看不到:curl.se
0赞 ADyson 10/20/2023
我猜你更有可能在PHP中使用普通套接字得到结果:php.net/manual/en/book.sockets.php
0赞 user20986345 10/20/2023
坦率地说,不确定IPC是什么......不是暗示它支持Unix套接字吗(它还明确指出我现在找不到它)?CURLOPT_UNIX_SOCKET_PATH
0赞 user20986345 10/20/2023
@ADyson我让一个 AI 为该 socat 命令制作一个有效的 PHP 示例,它给出了一个基于套接字的答案,但它也不起作用。
0赞 ADyson 10/20/2023
您可以通过 unix 套接字传输数据,但您发送的实际消息必须符合上面的协议。您提供的链接说您必须使用 JSON IPC 协议控制 mpv 设备

答: 暂无答案