python根据请求发送图像url

时间:2021-05-19 11:50:36

标签: python python-requests

usertoken = requests.request("GET", "http://127.0.0.1:8000/en/get-user-by-email?email={}".format("soubhagyakumar666@gmail.com"))
usertoken = usertoken.json()["user"]["token"]

url = "http://127.0.0.1:8000/en/update-project-thumbnail"
payload = {
    "project_id": 6885
}

files=[
    ('project_image',('{}'.format("_0005_MainCam_42.png"),
    'https://d3lwp4d5yh6xdg.cloudfront.net/static/artwork_project/6886/_0005_MainCam_42.png','rb', 'image/jpeg')),
]
headers = {
    'Authorization': 'Token '+ usertoken
}

response = requests.request("PUT", url, headers=headers, data=payload, files=files)
print(response.status_code, ":status_code")

在这里,我通过请求发送图像。 但是,我遇到了以下错误。我必须通过 url 发送图像 可能吗?

    File "/Users/soubhagyapradhan/Desktop/upwork/africa/backend/env/lib/python3.8/site-packages/requests/models.py", line 317, in prepare
        self.prepare_body(data, files, json)
    File "/Users/soubhagyapradhan/Desktop/upwork/africa/backend/env/lib/python3.8/site-packages/requests/models.py", line 505, in prepare_body
        (body, content_type) = self._encode_files(files, data)
    File "/Users/soubhagyapradhan/Desktop/upwork/africa/backend/env/lib/python3.8/site-packages/requests/models.py", line 165, in _encode_files
        rf = RequestField(name=k, data=fdata, filename=fn, headers=fh)
    File "/Users/soubhagyapradhan/Desktop/upwork/africa/backend/env/lib/python3.8/site-packages/urllib3/fields.py", line 155, in __init__
        self.headers = dict(headers)
    ValueError: dictionary update sequence element #0 has length 1; 2 is required
    ERROR 2021-05-19 11:47:06,121 basehttp 16077 123145380831232 "GET /en/signup H

1 个答案:

答案 0 :(得分:0)

问题出在以下代码上:

response = requests.request("PUT", url, headers=headers, data=payload, files=files)

文件(变量值)需要是字典数据结构,如图:

correct_file={'file':("project_image ( {0})".format("_0005_MainCam_42.png"), 
                      open('out.png'
                           , 'rb'),'image/png')} # replace out.png with your file path

因此请求将如下所示:

response = requests.request("PUT", url, headers=headers, data=payload, files=correct_file)