【问题标题】:curl - empty headers in responsecurl - 响应的空标题
【发布时间】: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 将获得更多读者。祝你好运!

标签: php curl


【解决方案1】:

在不了解收据打印机的情况下,我仅根据您发送的说明猜测它可能是dumb terminal,这意味着它将接受输入并打印东西,但不提供任何类型的信息返回给请求者。如果确实是这样设置的,那么您与之交互的“网络服务器”可能非常简陋,只能设置为接收连接。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2020-06-01
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多