2016-11-04 6 views
8

Ich versuche, diese post auszuführen, aber ich erhalte server error 500:Python-Anfragen Post-Abfrage schlägt fehl: Cookies?

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 

Ich glaube, ich brauche sonst Cookies oder etwas zu setzen.

Vielen Dank im Voraus für jede Hilfe.

+0

versuchen Sie mit einem Session-Objekt. http://docs.python-requests.org/en/master/user/advanced/ – Ajurna

+0

Warum denken Sie, Sie brauchen Cookies gesetzt? Ein HTTP-Server ist eine Blackbox und kann auf jede Anfrage antworten, wie auch immer sie es für richtig hält. Sie müssen experimentieren, welche Kombination von Kopf- und Körperdaten akzeptiert wird und welche nicht. Viele Server sind zum Beispiel so konfiguriert, dass sie nur Anfragen von bestimmten "User-Agent" -Köpfen akzeptieren, zum Beispiel (Client-Whitelisting). Sie müssen Ihre "Anfragen" -Anfragen mit Anfragen von anderen Clients vergleichen, die funktionieren, und ausprobieren, welche Unterschiede zwischen beiden bestehen. –

+0

Derzeit kann ich die Site nicht einmal in meinem * Browser * verwenden. Es sieht für mich so aus, als sei die Seite * kaputt *, und es wird auch keine Möglichkeit geben, ein Ergebnis mit 'Anfragen' aus dieser Seite zu bekommen. –

Antwort

5

Die meisten API-Zugriffspunkte auf dieser Site scheinen beschädigt zu sein. Es ist nichts falsch mit Ihrem Code per se. Ich kann nicht die Website tatsächlich auf Anfragen in ihrem eigenen Webinterface reagieren, auch wenn Sie einen normalen Browser verwenden.

Die main API documentation Details (in Französisch), dass Sie auch die SOAP protocol verwenden können, um Abfragen zu erstellen; Python hat several SOAP client libraries Sie könnten wählen.

Allerdings hatte ich kein Glück, das zu arbeiten entweder. Mit der ausgezeichneten zeep library Ich habe versucht, die einfachere GetMainCarMakeListByFirstDrivingDate endpoint (Anmerkung, dass ich ein datetime() Objekt verwenden musste, um den Zeitstempel zu modellieren) zuzugreifen:

>>> 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> 

ein Fault ist die SOAP-Äquivalent eines 500-Fehler hier.

Als ich enable debug logging, können wir sehen, dass der Server produziert wird, eine Antwort Probleme mit:

>>> 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. ---&gt; Erreur lors de la génération du document XML. ---&gt; 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> 

Versteckt in gibt es die Fehlermeldung:

Le serveur n'a pas pu traiter la demande. --- > Erreur lors de la génération des Dokuments XML. --- > Le Typ common.FormDataListItem n'était pas attendu. Verwenden Sie das Attribut XmlInclude ou SoapInclude Geben Sie den Code für die Art und Weise der Connus Statiquement.

oder, mit einigen Google-Hilfe Übersetzen in Englisch:

Der Server die Anforderung nicht verarbeiten konnte. ---> Fehler beim Erzeugen des XML-Dokuments. ---> Der Typ common.FormDataListItem wurde nicht erwartet. Verwenden Sie das XmlInclude- oder SoapInclude-Attribut, um Typen anzugeben, die statisch nicht bekannt sind.

Da wir keine common.FormDataListItem Arten senden, und die Nachricht beklagt, dass kein XML-Dokument erzeugt werden könnte, das sieht aus wie ein serverseitige Programmierfehler zu mir.

Es sind Methoden, die Arbeit zu tun, entweder über 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'] 

oder via Posting application/x-www-form-urlencoded Daten mit 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> 

Sie werden wahrscheinlich die Betreuer dieser API kontaktieren müssen Wenn Sie dies aussortieren, können Sie nicht auf der Python-Seite arbeiten.

+0

Vielen Dank für diese detaillierte Antwort. Ich weiß nicht, ob das helfen kann, aber 'GetCarTypeListByCodeMake'-Abfrage vom Browser zu testen: https: //www.assurland.com/ws/CarVehiculeSearch.asmx? Op = GetCarTypeListByCodeMake' mit' CodeMake = BMW' und 'FirstDrivingDate = 2016 -01-01' funktioniert gut für mich. – agstudy

+0

@agstudy: tatsächlich funktioniert diese Funktion *. Mehr Beweise dafür, dass die Seite einfach kaputt ist. –

+0

@agstudy: interessant; Wenn Sie ungültige Informationen in die Methode ['GetCarAlimListByCarType'] (https://www.assurland.com/ws/CarVehiculeSearch.asmx?op=GetCarAlimListByCarType) eingeben, erhalten Sie eine leere Antwort, aber eine gültige Information gibt Ihnen den Fehler. Dies ist 100% ein Fehler auf dieser Site. –

1

Das Problem ist das Datumsformat, das auf der Website schlecht gehandhabt wird.

Dieser Fehler 500 führt diese Beschreibung:

Erreur lors de la g&#233;n&#233;ration du document XML. ---> Le type common.FormDataListItem n&#39;&#233;tait pas attendu. Utilisez l&#39;attribut XmlInclude ou SoapInclude pour sp&#233;cifier les types qui ne sont pas connus statiquement. 

es von Ihrem Browser für eine benutzerfreundlichere Debug auf ihrer Seite Versuchen: https://www.assurland.com/ws/CarVehiculeSearch.asmx?op=GetCarBodyTypeListByCarAlim

Hinweis: „attribut XmlInclude ou SoapInclude pour sp é cifier les arten qui ne sont pas connus statiquement "

Also habe ich eine kleine Suche nach Datum in einem anderen Format versucht.

Als Beispiel:

Fri, 19 Jan 2001 

oder 19 Jan 2001

Sie erhalten 200 OK Anfrage - in diesem Fall ein leeres Ergebnis.

enter image description here

Leider nach einem bestimmten Jahr, sieht es dieses Format auch nicht angenommen wird: 22. September 2001 ergibt 200 OK aber 22. September 2015 nicht mehr - es geht bis 2008-12-31.

Versuchen Sie mit einem anderen Datetime-Format ... Aber es sieht aus, es gibt nichts da ... nehmen Sie eine andere Website :)