首页 > 解决方案 > curl - 响应的空标题

问题描述

我在一台主机上尝试 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 秒并且在此时间之后 curl 以这种方式响应: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);

标签: phpcurl

解决方案


在不了解收据打印机的情况下,我仅根据您发送的说明猜测它可能是一个哑终端,这意味着它将接受输入并打印内容,但不会向请求者提供任何类型的信息。如果确实是这样设置的,那么您与之交互的“网络服务器”可能非常初级,只能设置为接收连接。

您可能只需要向打印机发送命令并希望它完成它应该做的事情。


推荐阅读