繁体   English   中英

当xml大小增加时,Python请求XML API异常ConnectionError :(“连接已中止。”,BadStatusLine(“''”,))

[英]Python Requests XML API Exception ConnectionError: ('Connection aborted.', BadStatusLine(“''”,)) when xml size increases

我正在尝试使用XML API。 当我使用小的XML有效负载时,它工作正常。

下面是代码

import requests

xml = """<?xml version="1.0" encoding="ISO-8859-1"?>
     <!DOCTYPE MESSAGE SYSTEM "http://127.0.0.1:80/psms/dtd/messagev12.dtd">
     <MESSAGE VER="1.2">
     <USER USERNAME="xxxxx" PASSWORD="xxxx" />
     <CONTENT  UDH="0" CODING="1" TEXT="SAMPLE" PROPERTY="0" ID="1" TEMPLATE="">
     <ADDRESS FROM="XXXX" TO="XXXXXXXXXX" SEQ="0" TAG="test"/>
     ......
     ......
     </CONTENT>
     </MESSAGE>"""

     payload = {'data'   : xml,'action'   : 'send'}
     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0',
               'Content-Type': 'application/xml'}
     response =  requests.post(url, params = payload, headers=headers)
     print response.status_code
     print response.content

引发异常后,XML变得更大且包含更多数据的时刻

Traceback (most recent call last):
File "C:\Users\dell\Desktop\SMS XML\xml_sms_api.py", line 30, in <module>
response =  requests.post(url, params = payload, headers=headers)
File "C:\Python27\lib\site-packages\requests\api.py", line 110, in post
return request('post', url, data=data, json=json, **kwargs)
File "C:\Python27\lib\site-packages\requests\api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 473, in send
raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', BadStatusLine("''",))

直到有效负载XML大小变小,它都可以正常工作。 但是经过验证,该API可以在单个XML中最多处理5k个条目。

在尝试了各种选择之后,发现了问题和解决方案。

由于XML是在Requests中作为参数提供的,因此它会将URL编码为URL。 因此,当传递大量XML数据时,URL长度会超出限制。

因此将参数也更改为数据的内容类型

payload = {'data'   : xml,'action'   : 'send'}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0',
           'Content-Type': 'application/application/x-www-form-urlencoded'}
response =  requests.post(url, data = payload, headers=headers)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM