2016-04-14 37 views
0

リクエストモジュールを使用してCSVファイルを送信しようとしていますが、「400クライアントエラー:URLの不正要求」エラーが発生します。私が持っている仕様書によれば、カールのために与えられた例がここにあります。 curl -X PUT -H "Content-Disposition: attachment;filename=ABC.csv" -H "Content-Type: application/csv" -T ABC.csv http://.../api/dss/sites/1/vardefsPythonでRequests.PUTを使用してCSVファイルを送信する[400クライアントエラー:不正リクエスト]

以下は私のPythonコードです。

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

私が間違っていることはありますか? 'リクエスト' のドキュメントから

+0

URLが異なるアプリケーションデータの方法です。では、サーバーのスクリプトパス(URLではない)はどこですか?セッションなしでアクセスしようとしていますか?多分、サーバーはセッションで動作します。 – dsgdfg

+0

@dsgdfg:申し訳ありませんが、私はあなたを取得していません。もう少し説明していただけますか? – Muhammad

答えて

0

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

代わりにストリーミングのアップロードのために(最初に読まずに)直接WAを送信してみてください。また、リクエストを使ってアップロードする場合は、常に 'rb'(バイナリ読み出し)モードでファイルを開くことをお勧めします。

(コメントへの応答で編集)このような

何か:

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

それは、この時間を動作しますか?

+0

@R Bazhenov:この 'filepath = 'C:\ ... \ ABC.json'のような意味です。 レスポンス= requests.put(.../api/dss/sites/2/vardefs '、 のヘッダー – Muhammad

+0

これはうまくいきませんでした。これはうまくいきませんでした。 – Muhammad

+0

@muhammadwaseem編集したバージョンをお試しください。私は 'params'を削除しました - 元の' curl'リクエスト(私のように)に 'mydata'の代わりに' WA'​​を 'data'に渡したものはありませんでした(' mydata'は文字列でしたが 'data'パラメータは文字列を受け付けません)、 'open'文にバイナリ読み出しモードを追加しました。 –

関連する問題