使用cURL传输原始数据

使用cURL传输原始数据,curl,Curl,我需要将原始数据传输到服务器,而不是http服务器。也就是说,它不理解POST、PUT或类似命令。它只是在端口上侦听等待传入的数据,处理它们并将数据发送回。顺便说一句:服务器正在侦听非标准端口,即3500 无论我在cURL中尝试了什么选项,我都无法正确传输数据。cURL总是在发送实际数据之前至少发送一个“POST”或“PUT”。然后服务器用“…无效数据…”响应我 我尝试过的选项:--数据原始,-数据二进制,-上传文件,-原始,仅举几个例子 在cURL发送数据之前,是否有可能抑制“POST”或“P

我需要将原始数据传输到服务器,而不是http服务器。也就是说,它不理解POST、PUT或类似命令。它只是在端口上侦听等待传入的数据,处理它们并将数据发送回。顺便说一句:服务器正在侦听非标准端口,即3500

无论我在cURL中尝试了什么选项,我都无法正确传输数据。cURL总是在发送实际数据之前至少发送一个“POST”或“PUT”。然后服务器用“…无效数据…”响应我

我尝试过的选项:--数据原始,-数据二进制,-上传文件,-原始,仅举几个例子


在cURL发送数据之前,是否有可能抑制“POST”或“PUT”的传输?

您可以使用cURL的
telnet
协议选项来完成您想要的任务

将要传输的原始数据放入文件(或stdin中的管道)中,并沿以下行执行curl:

cat commands.txt | curl telnet://server:3500
使用curl的telnet协议处理程序,它将连接并传输接收到的数据,然后读取响应


注意:如果服务器在响应您的命令发送数据后没有终止连接,curl可能会保持连接打开,等待更多数据。如果是这种情况,您可能想尝试
nc
(netcat),或者编写一个可以进行双向通信的小型、简单的程序。

我认为这个问题适合www.superuser.com而不是stackoverflow,并投票关闭它,但下面是:

这不是curl的工作,这是curl的工作。使用cat读取文件,netcat发送文件并获得响应,例如

cat file.ext | nc server.com 3500
(有几种netcat实现,如原始的
*Hobbit*
的netcat、GNU netcat和*BSD netcat,我相信有些netcat实现需要语法
nc-p3500 server.com
,但是如果您使用的是GNU netcat、Cygwin的netcat或MacOS的netcat,上述语法应该可以正常工作y Linux系统附带GNU netcat)


如果您使用的是Windows,而Windows没有与cat/netcat一起提供,那么您可以安装Windows,默认情况下,Windows同时具有.MacOS和大多数Linux发行版与netcat&cat一起提供。

为什么要使用curl来实现此目的?为什么不只是将数据向前传输?curl(命令行工具)不支持任意的网络协议,只是一些。也许是你正在寻找的。answer@PeterWolf:是的,netcat似乎完成了这项工作,我必须进一步研究如何将其集成到我们的软件中-用于macOS和Win。谢谢!对不起,telnet是TCP之上的协议,OP没有说他的服务器使用telnet协议。-听起来像是netcat的工作。@drew010:我尝试了你的建议,但不知怎的,服务器的传输在8.192字节后停止了:-(Netcat工作正常,只是在进一步调查-请参阅我上面的评论。无论如何,谢谢!叹气@hanshenrik,他们没有说telnet,但使用curl和
telnet://
只会打开一个连接并发送您所说的任何内容。适用于您希望发送和接收的大多数基于tcp的套接字服务器。谢谢您的否决票。@drew010否,没有。如果您尝试通过telnet://使用curl发送二进制数据,curl可能会损坏数据。您可以通过一个小测试轻松验证这一点:首先执行
dd if=/dev/zero bs=10M count=1 iflag=fullblock | md5sum
-您得到了什么校验和?我得到
f1c9645dbc14efddc7d8a32685f266eb
-然后打开一个小型netcat服务器,
nc-l 9999 | md5sum
,然后运行命令
dd if=/dev/zero bs=10M count=1 iflag=fullblock | curltelnet://127.0.0.1:9999
,你得到了什么校验和?我得到了
c04ba4470a4374019c008c5f724d8e58
-10兆字节的空值被curl+telnet损坏://(在进行该测试之前,我自己也不是100%确定,但测试表明您的telnet://方法不能正确处理二进制数据,如空值。如果这真的有效,那将是一个很酷的黑客。不知道是否有人要求Daniel Stenberg实现
tcp://
协议)我之所以想使用cURL,是因为我们可以在两种平台(macOS和Win)上将其称为业务软件的插件对于NETCAT,我们没有合适的实现,因为CURLBTW: NETCAT是在Mac OS 10.14上进行测试的。我正在进一步研究。谢谢!J.O.RGEYYLY大部分的编程语言都支持原始的TCP套接字,这是您需要的。如果它是用PHP编写的,检查,如果它是用C++编写的,如果它是用Py编写的。硫检查等~