我正在尝试执行此post
,但我得到server error 500
:
import requests
base_url = "https://www.assurland.com/ws/CarVehiculeSearch.asmx"
url = "%s/%s"% (base_url,"GetCarBodyTypeListByCarAlim")
pars ={"CarAlim":"DIES","CarType": "A7", "CodeMake": "AUDI", "FirstDrivingDate": "2015-09-22"}
with requests.Session() as s:
r = s.post(url,data=pars)
print r.status_code
## 500
我想我需要设置cookie或其他东西。
提前感谢您的帮助。
答案 0 :(得分:5)
该网站上的大多数API访问点似乎都已损坏。您的代码本身没有任何问题。即使使用常规浏览器,我也无法让网站响应他们自己的网络界面中的任何请求。
main API documentation详细信息(法语),您还可以使用SOAP protocol创建查询; Python有several SOAP client libraries你可以选择。
然而,我没有幸运能够 。使用优秀的zeep
library我尝试访问更简单的GetMainCarMakeListByFirstDrivingDate
endpoint(请注意,我必须使用datetime()
对象来建模时间戳):
>>> from zeep import Client
>>> client = Client('https://www.assurland.com/ws/CarVehiculeSearch.asmx?WSDL')
>>> client.service.GetMainCarMakeListByFirstDrivingDate(FirstDrivingDate=datetime(2015, 9, 22))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/zeep/client.py", line 25, in __call__
self._op_name, args, kwargs)
File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 109, in send
return self.process_reply(client, operation_obj, response)
File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 145, in process_reply
return self.process_error(doc, operation)
File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 223, in process_error
detail=fault_node.find('detail'))
zeep.exceptions.Fault: <exception str() failed>
Fault
是这里的500错误的SOAP等价物。
当我enable debug logging时,我们可以看到服务器在生成响应时出现问题:
>>> client.service.GetMainCarMakeListByFirstDrivingDate(FirstDrivingDate=datetime(2015, 9, 22))
zeep.transports: HTTP Post to https://www.assurland.com/ws/CarVehiculeSearch.asmx:
<?xml version='1.0' encoding='utf-8'?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<ns0:GetMainCarMakeListByFirstDrivingDate xmlns:ns0="http://tempuri.org/">
<ns0:FirstDrivingDate>2015-09-22T00:00:00</ns0:FirstDrivingDate>
</ns0:GetMainCarMakeListByFirstDrivingDate>
</soap-env:Body>
</soap-env:Envelope>
zeep.transports: HTTP Response from https://www.assurland.com/ws/CarVehiculeSearch.asmx (status: 500):
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>Le serveur n'a pas pu traiter la demande. ---> Erreur lors de la génération du document XML. ---> Le type common.FormDataListItem n'était pas attendu. Utilisez l'attribut XmlInclude ou SoapInclude pour spécifier les types qui ne sont pas connus statiquement.</faultstring><detail /></soap:Fault></soap:Body></soap:Envelope>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/zeep/client.py", line 25, in __call__
self._op_name, args, kwargs)
File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 109, in send
return self.process_reply(client, operation_obj, response)
File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 145, in process_reply
return self.process_error(doc, operation)
File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 223, in process_error
detail=fault_node.find('detail'))
zeep.exceptions.Fault: <exception str() failed>
隐藏在错误信息中:
Le serveur n'a pas pu traiter la demande。 ---&GT; Erreur lors delagénérationdudocument XML。 ---&GT; Le typecommon.FormDataListItemn'étaitpasattendu。 Utilisez l'attribut XmlInclude ou SoapIncludepourspécifierlestypes qui ne sont pas connus statiquement。
或者,有一些谷歌翻译帮助,用英语:
服务器无法处理请求。 ---&GT;生成XML文档时出错。 ---&GT;不期望类型common.FormDataListItem。使用XmlInclude或SoapInclude属性指定静态未知的类型。
由于我们没有发送任何common.FormDataListItem
类型,和消息抱怨没有生成的XML文档,这看起来像服务器端编程我错了。
有些方法可以通过SOAP实现:
>>> client.service.GetCarTypeListByCodeMake(CodeMake='BMW', FirstDrivingDate=datetime(2016, 1, 1))
['I3', 'I8', 'M2', 'M3', 'M4', 'M5', 'M6', 'SERIE 1 II', 'SERIE 2', 'SERIE 3 VI', 'SERIE 4', 'SERIE 5', 'SERIE 6', 'SERIE 7', 'X1', 'X3', 'X4', 'X5', 'X6', 'Z4']
>>> client.service.GetAllCarTypeListByCodeMake(CodeMake='BMW')
['1502', '1600', '1602', '1800', '1802', '2000', '2002', '2500', '3,0', '3,3', '315', '316', '318', '320', '323', '324', '325', '328', '330', '518', '520', '523', '524', '525', '528', '530', '535', '540', '545', '550', '628', '630', '633', '635', '645', '650', '725', '728', '730', '732', '733', '735', '740', '745', '750', '760', '840', '850', 'I3', 'I8', 'L7', 'M2', 'M3', 'M4', 'M5', 'M535', 'M6', 'M635', 'SERIE 1', 'SERIE 1 II', 'SERIE 2', 'SERIE 3', 'SERIE 3 (SUITE)', 'SERIE 3 VI', 'SERIE 4', 'SERIE 5', 'SERIE 6', 'SERIE 7', 'X1', 'X3', 'X4', 'X5', 'X6', 'Z1', 'Z3', 'Z4', 'Z8']
或通过application/x-www-form-urlencoded
张贴requests
数据:
>>> response = requests.post('https://www.assurland.com/ws/CarVehiculeSearch.asmx/GetCarTypeListByCodeMake', data={'CodeMake': 'BMW', 'FirstDrivingDate': datetime(2016, 1, 1)})
>>> print(response.text)
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfAnyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<anyType xsi:type="xsd:string">I3</anyType>
<anyType xsi:type="xsd:string">I8</anyType>
<anyType xsi:type="xsd:string">M2</anyType>
<anyType xsi:type="xsd:string">M3</anyType>
<anyType xsi:type="xsd:string">M4</anyType>
<anyType xsi:type="xsd:string">M5</anyType>
<anyType xsi:type="xsd:string">M6</anyType>
<anyType xsi:type="xsd:string">SERIE 1 II</anyType>
<anyType xsi:type="xsd:string">SERIE 2</anyType>
<anyType xsi:type="xsd:string">SERIE 3 VI</anyType>
<anyType xsi:type="xsd:string">SERIE 4</anyType>
<anyType xsi:type="xsd:string">SERIE 5</anyType>
<anyType xsi:type="xsd:string">SERIE 6</anyType>
<anyType xsi:type="xsd:string">SERIE 7</anyType>
<anyType xsi:type="xsd:string">X1</anyType>
<anyType xsi:type="xsd:string">X3</anyType>
<anyType xsi:type="xsd:string">X4</anyType>
<anyType xsi:type="xsd:string">X5</anyType>
<anyType xsi:type="xsd:string">X6</anyType>
<anyType xsi:type="xsd:string">Z4</anyType>
</ArrayOfAnyType>
你可能需要联系这个API的维护者来解决这个问题,这不是你可以在Python方面工作的东西。
答案 1 :(得分:1)
问题是网站中处理不当的日期格式。
该错误500带有此描述:
Erreur lors de la génération du document XML. ---> Le type common.FormDataListItem n'était pas attendu. Utilisez l'attribut XmlInclude ou SoapInclude pour spécifier les types qui ne sont pas connus statiquement.
在浏览器的页面上尝试使用,以获得更加用户友好的调试: https://www.assurland.com/ws/CarVehiculeSearch.asmx?op=GetCarBodyTypeListByCarAlim
注意:“attribut XmlInclude ou SoapInclude pourspécifierlestypes qui ne sont pas connus statiquement”
所以我尝试了一点搜索,以另一种格式输入日期。
例如:
Fri, 19 Jan 2001
或19 Jan 2001
您收到200 OK
请求 - 在这种情况下为空结果。
不幸的是,在某一年之后,看起来格式也不被接受:2001年9月22日收益200 OK但2015年9月22日没有更多 - 它一直持续到 2008-12-31
尝试使用其他日期时间格式...但它看起来有什么...采取另一个网站:)