2016-04-14 4 views
0

Ich versuche, eine CSV-Datei mit Request-Modul zu senden, aber ich bekomme immer "400 Client Fehler: SCHLECHT ANFORDERUNG für URL" -Fehler. Gemäß der Spezifikation, die ich habe, hier ist ein Beispiel, das für die Locke gegeben wurde; curl -X PUT -H "Content-Disposition: attachment;filename=ABC.csv" -H "Content-Type: application/csv" -T ABC.csv http://.../api/dss/sites/1/vardefsSenden von CSV-Datei mit Requests.PUT in Python [400 Client Fehler: Ungültige Anfrage]

Unten ist mein Python-Code;

import requests 
filepath = 'C:\...\ABC.csv' 
with open(filepath) as WA: 
    mydata = WA.read() 
    response = requests.put('http://...../api/dss/sites/1/vardefs', 
          data=mydata,       
          headers = {'content-type':'application/csv', 'Content-Disposition': 'attachment;filename=Cu_temp.csv'},    
          params={'file': filepath} 
      ) 
    response.raise_for_status() 

Irgendeine Idee auf, was ich falsch mache?

+0

Url Ziel andere App Daten Weg. Also, wo Server-Skript-Pfad (es ist keine URL)? Und Sie versuchen Zugang ohne Sitzung? Vielleicht arbeiten Server mit Session. – dsgdfg

+0

@dsgdfg: Entschuldigung, ich habe dich nicht verstanden. Könntest du bitte etwas mehr erklären? – Muhammad

Antwort

0

Aus 'Anfragen' docs:

data -- (optional) Dictionary, bytes, or file-like object to send in the body of the Request.

Versuchen WA direkt Senden (ohne erste Lesung) statt für ein Streaming-Upload. Es wird außerdem empfohlen, Dateien im 'rb' (binär lesen) Modus zu öffnen, wenn Sie mit Anfragen hochladen.

(Edit als Antwort auf einen Kommentar)

Etwas wie folgt aus:

import requests 

filepath = 'C:\...\ABC.csv' 
with open(filepath, 'rb') as WA: 
    response = requests.put('http://...../api/dss/sites/1/vardefs', 
          data=WA, 
          headers = { 
              'content-type':'application/csv', 
              'Content-Disposition': 'attachment;filename=Cu_temp.csv' 
             }) 

Ist es diesmal funktioniert?

+0

@R Bazhenov: du meinst genau so 'filepath =' C: \ ... \ ABC.json ' response = requests.put (.../api/dss/sites/2/vardefs', headers = {'content-type': 'application/json', 'Inhalts-Disposition': 'attachment; Dateiname = Cu_temp.json'}, params = {'Datei': Dateipfad}) ' – Muhammad

+0

Dies hat auch nicht funktioniert. – Muhammad

+0

@muhammadwaseem bitte versuchen Sie die bearbeitete Version. Ich entfernte 'params' - es gab keine in Ihrer ursprünglichen 'curl'-Anfrage (wie es mir scheint), übergab' WA' ​​an 'data' anstelle von' mydata' ('mydata' war eine Zeichenkette, aber' data' Parameter sollte keine Zeichenfolgen akzeptieren) und der 'open'-Anweisung binären Lesemodus hinzugefügt. –

Verwandte Themen