2016-04-24 23 views
0

Pythonとリクエストを使用して、カスタム認証メカニズムを使用してmultipart/form-data POSTリクエストを使用してファイルにAPIをアップロードしようとしています(認証トークン'ヘッダー)。ここでPythonリクエストを使用して認証されたmultipart/form-dataリクエストを送信する

は、私が使用するコードです:残念ながら、この要求は、サーバー上で次の例外(バックエンドは、Springフレームワークを使用している)を引き起こす

import requests 
from requests.auth import AuthBase 

class MyAuth(AuthBase): 

    def __init__(self, token): 
     self.token = token 

    def __call__(self, r): 
     r.headers['Authentication-Token'] = self.token 
     return r 

token = "175a5607d2e79109539b490f0f8ffe60" 
url = "https://my-ap.com/files" 

r = requests.post(url, 
        files={'file': open('qsmflkj.jpg', 'rb')}, 
        data={'id': 151}, 
        auth=MyAuth(token) 
) 

org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found 

を私が試してみましたヘッダーを自分自身に追加するようなものがたくさんありますが、これは「正しい」方法であると思われ、失敗します。 APIはさまざまなモバイルクライアントから使用されているため、そこに画像をアップロードすることが可能です。このAPIをPythonで使用できるようにするにはどうしたらよいですか?

+1

私は春が問題http://stackoverflow.com/a/28303489だと思います/ 2141635 –

答えて

0

は最後に、私がリクエストでこれを行うために管理したことがないが、私はurllib2のとポスターライブラリに成功しました:

from poster.encode import multipart_encode 
from poster.streaminghttp import register_openers 

import urllib2 

register_openers() 
token = "175a5607d2e79109539b490f0f8ffe60" 

with open('qsmflkj.jpg', 'rb') as f: 
    datagen, headers = multipart_encode({"file": f}) 
    headers['Authentication-Token'] = token 
    request = urllib2.Request("https://myserver.com/files", \ 
           datagen, headers) 
    response = urllib2.urlopen(request) 
関連する問題