Bash curl post音频数据具有速率限制

Bash curl post音频数据具有速率限制,bash,api,http,curl,audio,Bash,Api,Http,Curl,Audio,我正试图用curl发布一个HTTP-API的音频数据,这个HTTP-API允许发送/接收音频文件 首先,我尝试了这个: curl -vv --http1.0 -H "Content-Type: audio/basic" -H "Content-Length: 9999999" -H "Connection: Keep-Alive" -H "Cache-Control: no-cache" --data-binary @- 'http://IP/API-Endpoint.cgi' 这似乎有效:

我正试图用curl发布一个HTTP-API的音频数据,这个HTTP-API允许发送/接收音频文件

首先,我尝试了这个:

curl -vv --http1.0 -H "Content-Type: audio/basic" -H "Content-Length: 9999999" -H "Connection: Keep-Alive" -H "Cache-Control: no-cache" --data-binary @- 'http://IP/API-Endpoint.cgi'
这似乎有效:

*   Trying [IP]...
* TCP_NODELAY set
* Connected to [IP] ([IP]) port 80 (#0)
> POST /API-Endpoint.cgi HTTP/1.0
> Host: [IP]
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Type: audio/basic
> Content-Length: 9999999
> Connection: Keep-Alive
> Cache-Control: no-cache
> 
* upload completely sent off: 17456 out of 17456 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: text/plain
< Content-Length: 0
* HTTP/1.0 connection set to keep alive!
< Connection: keep-alive
< Date: Wed, 06 Jun 2018 19:38:37 GMT
< Server: lighttpd/1.4.45
但结果总是一样的:我只能听到音频文件的最后一部分。curl似乎在等待管道输入完成,然后像以前一样发送请求

是否有一个选项可以“实时”将音频从bash发布到HTTP-API

更新: 在不强制HTTP 1.0的情况下,我得到以下结果:

curl -vv -H "Content-Type: audio/basic" --data-binary '@myfile.wav' 'http://[IP]/API-Endpoint.cgi'
*   Trying [IP]...
* TCP_NODELAY set
* Connected to [IP] ([IP]) port 80 (#0)
> POST /API-Endpoint.cgi HTTP/1.1
> Host: [IP]
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Type: audio/basic
> Content-Length: 15087
> Expect: 100-continue
> 
< HTTP/1.1 417 Expectation Failed
< Content-Type: text/html
< Content-Length: 363
< Connection: close
< Date: Wed, 06 Jun 2018 20:34:22 GMT
< Server: lighttpd/1.4.45
< 
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>417 - Expectation Failed</title>
 </head>
 <body>
  <h1>417 - Expectation Failed</h1>
 </body>
</html>
* Closing connection 0
curl-vv-H“内容类型:音频/基本”--数据二进制'@myfile.wav''http://[IP]/API Endpoint.cgi'
*正在尝试[IP]。。。
*TCP_节点集
*连接到[IP]([IP])端口80(#0)
>POST/API-Endpoint.cgi HTTP/1.1
>主持人:[IP]
>用户代理:curl/7.54.0
>接受:*/*
>内容类型:音频/基本
>内容长度:15087
>预期:100人继续
> 
使用
-H“Content Length:9999999”
您说您的音频文件的长度正好是9999999字节(大约10兆字节),但curl报告您的文件是17456字节:

* upload completely sent off: 17456 out of 17456 bytes
(大约0.02兆字节),所以要么你的内容长度头是错误的(这是我最好的猜测),要么你的音频文件提供给curl的程序是错误的,过早地关闭了stdin

要么修复内容长度头,要么修复程序的stdin,希望这样可以完整地发送整个文件

编辑:哦,似乎服务器无法处理
Expect:100 continue
,若要禁用该标头,请添加参数
-H'Expect:'

(一个空的Expect标头将使curl完全忽略该标头,而不是将标头发送为空)


。。。但是要回答标题中的问题,是的,这就是
--限制速率
参数。

多亏了TCP,编写一个HTTP服务器需要特别的、有意识的努力,当数据写入速度过快时,该服务器会失败,所以我怀疑这是问题所在。为什么要强制使用HTTP 1.0并伪造大小标题?我之所以强制使用HTTP 1.0,是因为API示例是针对HTTP 1.0的,当使用HTTP 1.1时,我得到了417个预期失败(似乎没有返回100 continue)。size头也来自API文档示例-尽管这可能被认为是连续流-我只在设置此特定大小头时听到了一些声音。您的文件是否有2秒长?你能听到多少?我正在测试的文件是1.9秒长,我能听到1秒后的部分。然后我用同一个文件进行测试,但在前面加了1秒的沉默。有了这个文件,我只能听到一点静态噪音。更正:这听起来不对,所以我仔细检查了文件。添加了静默的长文件具有错误的采样率。通过正确的采样率,我还可以听到2.9s文件中的最后一秒。
* upload completely sent off: 17456 out of 17456 bytes