【发布时间】:2019-12-12 15:03:32
【问题描述】:
我在一台主机上尝试 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
问题
尽管使用了详细信息,为什么我没有在响应中获得标题?我需要了解打印机的工作原理以及标题我可以获得更多信息,因为我必须开发来自网络的调用应用到此设备。
其他信息
对于打印机的 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);
【问题讨论】:
-
不清楚您是否希望连接完全终止。 ` -m, --max-time SECONDS ` 会有帮助吗?我做了
curl --help | less和/time,还有许多其他time选项,每一个都比前一个更模糊;-),但也许其中一个可能对你有所帮助。如果您为您的项目使用的编程语言添加标签,您的 Q 将获得更多读者。祝你好运!