Python请求XML API异常ConnectionError :('连接中止。',BadStatusLine(“''”,))当xml大小增加
问题描述:
我正在尝试命中XML API。当我使用小XML有效载荷时,它工作正常。Python请求XML API异常ConnectionError :('连接中止。',BadStatusLine(“''”,))当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在请求中作为参数提供,因此它将URL编码到URL中。所以当大量的XML数据通过时,URL长度超过限制。
因此改变了PARAMS到的数据也将内容类型
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)
你的问题的根源显然是在你的脚本连接到服务器软件。无论如何,你可以尝试在https://httpbin.org/上测试你的代码来检查是否存在客户端问题。 – glenfant
@glenfant:API服务器有一个测试环境,它可以接受更大的XML负载而不会有任何问题。使用python脚本进行连接时会发生问题 – JithPS