curl-响应中的标题为空

时间:2019-12-12 15:03:32

标签: php curl

我尝试在主机上卷曲,该主机是收银机打印机。打印机可以通过请求正文中的http接受指令,例如以下示例:

[www@localhost ~]$ curl --trace curl.trace.log -d '
> clear
> vend rep=1, pre=10
> vend rep=2, pre=20
> chius
> wecfine
>' http://192.168.6.184:1471

但是我不明白为什么启动此命令后,目标主机会正确响应正文中的指令,并且打印机可以正常工作,但是在日志响应之后,连接保持打开状态30秒钟,然后卷曲响应此问题。方式:Connection #0 to host 192.168.6.184 left intact。我的问题是我尝试以所有方式(--trace curl.trace.log--trace-ascii curl.trace-ascii.log--dump-header curl.dump-header.log和最后一个-v)记录响应标头,但这些方法均无效。我所有方式的唯一响应日志是这样的:

* About to connect() to 192.168.6.184 port 1471 (#0)
*   Trying 192.168.6.184...
* Connected to 192.168.6.184 (192.168.6.184) port 1471 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.6.184:1471
> Accept: */*
> Content-Length: 57
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 57 out of 57 bytes
OK.
OK.
OK.
OK.
OK.
* Connection #0 to host 192.168.6.184 left intact

问题

尽管使用了冗长的内容,为什么我仍未在响应中获得标题?我需要了解打印机的工作方式,并使用标题可以获取更多信息,因为必须从Web开发呼叫应用到此设备。

其他信息

对于打印机的curl调用,我将使用php。

此收银机的文件真差而且不完整。

[编辑]

PHP中用于测试的curl命令,结果相同,变量$headers只是一个空数组!

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://192.168.6.184:1471');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '
clear
vend rep=1, pre=10
vend rep=2, pre=20
chius
wecfine
');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: text/plain']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$headers = [];
curl_setopt($ch, CURLOPT_HEADERFUNCTION,
function($curl, $header) use (&$headers)
{
    $len = strlen($header);
    $header = explode(':', $header, 2);
    if (count($header) < 2) // ignore invalid headers
        return $len;

    $headers[strtolower(trim($header[0]))][] = trim($header[1]);

    return $len;
    }
);

$output=curl_exec($ch);
curl_close($ch);

1 个答案:

答案 0 :(得分:1)

在不了解票据打印机的情况下,仅基于您发送的说明,我的猜测是它可能是dumb terminal,这意味着它将接受输入并打印东西,但不提供任何种类的信息。返回给请求者。如果确实是以这种方式设置的,则您正在与之交互的“ Web服务器”可能是非常初级的,并且仅设置为接收连接。

您可能只需要向打印机发送命令,并希望它能够完成预期的工作即可。