<p>该站点上的大多数API访问点似乎已损坏。你的代码本身没有问题。实际上,即使使用常规浏览器,我也无法让网站在自己的web界面中对任何请求做出响应。在</p>
<p>您还可以使用<a href="https://en.wikipedia.org/wiki/SOAP" rel="nofollow noreferrer">SOAP protocol</a>创建查询的<a href="https://www.assurland.com/ws/CarVehiculeSearch.asmx" rel="nofollow noreferrer">main API documentation</a>详细信息(法语);Python有{a3}可供选择。在</p>
<p>然而,我也没有运气让它发挥作用。使用优秀的<a href="http://docs.python-zeep.org/en/master/" rel="nofollow noreferrer">^{<cd1>} library</a>我试图访问更简单的<a href="https://www.assurland.com/ws/CarVehiculeSearch.asmx?op=GetMainCarMakeListByFirstDrivingDate" rel="nofollow noreferrer">^{<cd2>} endpoint</a>(注意,我必须使用<code>datetime()</code>对象来建模时间戳):</p>
<pre><code>>>> 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>
</code></pre>
<p>一个<code>Fault</code>在这里相当于一个500错误。在</p>
<p>当我<a href="http://docs.python-zeep.org/en/master/transport.html#debugging" rel="nofollow noreferrer">enable debug logging</a>时,我们可以看到服务器在生成响应时出现问题:</p>
^{pr2}$
<p>其中隐藏着错误消息:</p>
<blockquote>
<p>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.</p>
</blockquote>
<p>或者,在谷歌翻译的帮助下,用英语:</p>
<blockquote>
<p>The server could not process the request. -> Error generating the XML document. -> The type common.FormDataListItem was not expected. Use XmlInclude or SoapInclude attribute to specify types that are not known statically.</p>
</blockquote>
<p>由于我们没有发送任何<code>common.FormDataListItem</code>类型、<em>和</em>消息抱怨说,不能<em>生成</em>的XML文档,这在我看来像是服务器端编程错误。在</p>
<p>有一些方法可以通过SOAP来工作:</p>
<pre><code>>>> 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']
</code></pre>
<p>或通过使用<code>requests</code>发布<code>application/x-www-form-urlencoded</code>数据:</p>
<pre><code>>>> 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>
</code></pre>
<p>您可能需要联系这个API的维护人员来解决这个问题,这不是在Python方面可以解决的问题。在</p>