Python3.6 requests.post导致ConnectionError编号为104,但使用curl时一切正常

时间:2017-07-07 13:08:12

标签: python curl

我正在尝试将curl命令重写为python。这个想法如下:我们上传一个音频文件,并以文本形式回复它所说的内容 - 例如演讲到文本。

该网站为我们提供了一个curl示例,它会发布一个帖子请求,并作为回报接收一个简单的响应。

当我尝试将curl请求转换为python请求时(https://curl.trillworks.com/没有帮助)我得到ConnectionError号104,连接由peer重置。

我强烈怀疑发生这种情况是因为当我首先通过curl建立连接时,我得到了响应:< HTTP / 1.1 100继续,并在等待另一个响应的短暂时间后:< HTTP / 1.1 200 OK,带有一些示例数据。我认为python的request.post只挂在第一个HTTP / 1.1 100上。

我无法使用try ...处理或重置连接,除了...,没有成功使用time.sleep()循环它。

有什么想法吗?

P.S。代码:

卷曲命令:

curl "LINK TO SERVER" -H "Content-Type: audio/x-speex;rate=16000" -H "Accept-Language: ENUS" -H "Transfer-Encoding: chunked" -H "Accept: application/xml" -H "Accept-Topic: Dictation" -k --data-binary @audio_16k16bit.pcm 

Python等价物:

#!/bin/python

import requests
import time

headers = {
   'Content-Type': 'audio/x-wav;codec=pcm;bit=16;rate=16000',
   'Accept-Language': 'ENUS',
   'Transfer-Encoding': 'chunked',
   'Accept': 'application/xml',
    'Accept-Topic': 'Dictation',
}

params = (
    ('appId', ''),
     ('appKey',''),
('id', ''),
)

data = open('audio_16k16bit.pcm', 'rb').read()

r = requests.post('LINK TO SERVER', headers=headers, data=data, verify=False)

print(r.content)

1 个答案:

答案 0 :(得分:0)

应该删除并让服务器确定文件的类型,因为我们将它作为一个文件发送,不需要chunked:

'Content-Type': 'audio/x-wav;codec=pcm;bit=16;rate=16000',
 'Transfer-Encoding': 'chunked'