我尝试在主机上卷曲,该主机是收银机打印机。打印机可以通过请求正文中的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);
答案 0 :(得分:1)
在不了解票据打印机的情况下,仅基于您发送的说明,我的猜测是它可能是dumb terminal,这意味着它将接受输入并打印东西,但不提供任何种类的信息。返回给请求者。如果确实是以这种方式设置的,则您正在与之交互的“ Web服务器”可能是非常初级的,并且仅设置为接收连接。
您可能只需要向打印机发送命令,并希望它能够完成预期的工作即可。