使用Python请求发送经过身份验证的multipart/formdata请求

2024-05-23 19:50:37 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python和Requests,我尝试使用带有自定义身份验证机制的multipart/form datapost请求将文件上载到API(只需添加一个“authentication Token”头)。在

下面是我使用的代码:

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

不幸的是,此请求在服务器上导致以下异常(后端使用的是Spring框架):

^{pr2}$

我尝试了很多方法,比如自己添加头,但这似乎是“正确”的方法,但它失败了。我知道API是从各种移动客户端使用的,因此,可以在那里上传图片。为了在Python中使用这个API,我可以做些什么?在


Tags: 方法importselftokenauth身份验证apiurl
1条回答
网友
1楼 · 发布于 2024-05-23 19:50:37

最后,我从未成功地处理过请求,但我成功地使用了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)

相关问题 更多 >