2016-04-14 34 views
0

İstek modülünü kullanarak bir csv dosyası göndermeye çalışıyorum ancak "400 Müşteri Hatası: URL için BAD İSTEĞE" hatası alıyorum. Sahip olduğum şartnameye göre, burada kıvrım için verilen bir örnek; curl -X PUT -H "Content-Disposition: attachment;filename=ABC.csv" -H "Content-Type: application/csv" -T ABC.csv http://.../api/dss/sites/1/vardefspython'da Requests.PUT kullanarak csv dosyası gönderme [400 İstemci hatası: Hatalı İstek]

Python kodum aşağıdadır;

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

Neyi yanlış yaptığım hakkında bir fikrin var mı? 'Istekleri' Dokümanlar

+0

URL, farklı Uygulama veri yolunu hedefler. Peki, sunucu komut dosyası yolu (URL değil) nerede? Ve oturum olmadan erişmeyi deniyor musun? Belki sunucu oturum ile çalışır. – dsgdfg

+0

@dsgdfg: Üzgünüm, seni anlamadım. Biraz daha açıklar mısınız lütfen? – Muhammad

cevap

0

:

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

yerine bir akış yükleme için (ilk okumadan) doğrudan WA göndermeyi deneyin. Ayrıca, isteklerle birlikte yüklerken 'rb' (read readary) modunda dosyaları açmak her zaman tavsiye edilir.

(Bir yoruma yanıt olarak düzenle) böyle

şey:

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' 
             }) 

bu kez çalışır mı?

+0

@R Bazhenov: Yani bu gibi 'dosya yolu =' C: \ ... \ ABC.json ' yanıt = requests.put (.../api/dss/siteler/2/vardefs', başlıkları = {'content-type': 'application/json', 'Content-Disposition': 'attachment; dosya adı = Cu_temp.json'}, params = {'dosya': filepath}) ' – Muhammad

+0

Bu da işe yaramadı. – Muhammad

+0

@muhammadwaseem Lütfen düzenlenmiş sürümü deneyin. 'Params'i kaldırdım - orijinal 'curl' isteğinizde hiç yoktu (bana göründüğü gibi),' '' '' mydata' yerine '' data' '' '' '' '' '' '' '' '' '' 'data' parametresi bir dizgedir fakat' data' parametresi olmalıdır dizeleri kabul edilmez) ve 'open' deyimine ikili okuma modu eklendi. –