samedi 25 juillet 2020

Python Requests multipart/form-data Returning Errors

So I am currently attempting to upload an image to this fileserver. Which wants it to be multi-part form data. enter image description here

    def update_pfp(self, username):
        filename = random.choice(os.listdir("pfps\\"))
        full_path = os.path.join("pfps\\", filename)
        main_page = self.sess.get("https://www.reddit.com")
        auth_token = main_page.text.split("{\"accessToken\":\"")[1].split('"')[0]
        authorization = {"authorization": "Bearer %s" % auth_token}
        file_config = {
            "filepath": filename,
            "imagetype": "profileIcon",
            "mimetype": "image/jpeg"
        }

        prep_image = self.sess.post("https://oauth.reddit.com/api/v1/style_asset_upload_s3/u_%s?raw_json=1&gilding_detail=1" % (username),
                                     headers=authorization,
                                     data=file_config).json()
        image_config = {
            "acl": prep_image["s3UploadLease"]["fields"][0]["value"],
            "key": prep_image["s3UploadLease"]["fields"][1]["value"],
            "X-Amz-Credential": prep_image["s3UploadLease"]["fields"][2]["value"],
            "X-Amz-Algorithm": prep_image["s3UploadLease"]["fields"][3]["value"],
            "X-Amz-Date": prep_image["s3UploadLease"]["fields"][4]["value"],
            "success_action_status": prep_image["s3UploadLease"]["fields"][5]["value"],
            "content-type": prep_image["s3UploadLease"]["fields"][6]["value"],
            "x-amz-storage-class": prep_image["s3UploadLease"]["fields"][7]["value"],
            "x-amz-meta-ext": prep_image["s3UploadLease"]["fields"][8]["value"],
            "policy": prep_image["s3UploadLease"]["fields"][9]["value"],
            "X-Amz-Signature": prep_image["s3UploadLease"]["fields"][10]["value"],
            "x-amz-security-token": prep_image["s3UploadLease"]["fields"][11]["value"]
        }
        print(image_config)
        upload_image = self.sess.post("https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com/",
                                       data=image_config,
                                       headers={'Content-Type': 'multipart/form-data'},
                                       files={"file":open(full_path, "rb")})
        print(upload_image.text)
        print(upload_image.text.split("Location")[0].split("/Location")[0])
        data = {
            "profileIcon": upload_image.text.split("Location")[0].split("/Location")[0]
        }
        update_pfp = self.sess.patch("https://oauth.reddit.com/api/v1/structured_styles/u_%s?raw_json=1&gilding_detail=1" % (username),
                                     data=data,
                                     headers=authorization)
        return {"status_code":update_pfp.status_code, "response":update_pfp.text}

Which In this code I am attempting to do inside of my code, however when I make my request it returns:

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>MalformedPOSTRequest</Code><Message>The body of your POST request is not well-formed multipart/form-data.</Message><RequestId>5322225CBFE6DEB9</RequestId><HostId>UiW2MJUa0ebt4pfistrpdASRiZdRAFAiU39bBEwzM1GoiJW3Lo79s1moX/G9xJA+QpsBsiS7d14=</HostId></Error>

The full request itself that I am making to reddit for changing my profile picture is:

Request URL: https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com/
Request Method: POST
Status Code: 201 Created
Remote Address: 54.192.228.197:443
Referrer Policy: origin-when-cross-origin
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST
Access-Control-Allow-Origin: https://www.reddit.com
Connection: keep-alive
Content-Length: 359
Content-Type: application/xml
Date: Sat, 25 Jul 2020 10:16:34 GMT
ETag: "b9f41e490905d7a4029d69c793a3038f"
Location: https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com/t5_2wm7mt%2Fstyles%2FprofileIcon_ueh4gtm5bzc51.jpg
Server: AmazonS3
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Via: 1.1 02362f0faae05408640185d927020628.cloudfront.net (CloudFront)
X-Amz-Cf-Id: f2M53zyqv3LVnV4t7l30QzyahDJygcFwa_hfcU7PP4TeGnU8LeqsFA==
X-Amz-Cf-Pop: WAW50-C1
x-amz-expiration: expiry-date="Mon, 27 Jul 2020 00:00:00 GMT", rule-id="delete-after-1-day"
x-amz-id-2: C4l13QemaL2qHBioEeIjLAq1ogHu+O9ZYtc3AkEMLq4iXYY2o7t4QFVvmKQSd19TSM4LbkSuHZ8=
x-amz-request-id: DE3B077AE5A6EBC8
X-Cache: Miss from cloudfront
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,cy;q=0.8
Connection: keep-alive
Content-Length: 48610
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryYEPWi7vf0TuWFABk
DNT: 1
Host: reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com
Origin: https://www.reddit.com
Referer: https://www.reddit.com/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36
acl: public-read
key: t5_2wm7mt/styles/profileIcon_ueh4gtm5bzc51.jpg
X-Amz-Credential: ASIATB45ILA56KJYRUKA/20200725/us-east-1/s3/aws4_request
X-Amz-Algorithm: AWS4-HMAC-SHA256
X-Amz-Date: 20200725T101631Z
success_action_status: 201
content-type: image/jpeg
x-amz-storage-class: STANDARD
x-amz-meta-ext: jpg
policy: eyJjb25kaXRpb25zIjogW3siYnVja2V0IjogInJlZGRpdC1zdWJyZWRkaXQtdXBsb2FkZWQtbWVkaWEifSwgeyJrZXkiOiAidDVfMndtN210L3N0eWxlcy9wcm9maWxlSWNvbl91ZWg0Z3RtNWJ6YzUxLmpwZyJ9LCB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LCB7IngtYW16LXN0b3JhZ2UtY2xhc3MiOiAiU1RBTkRBUkQifSwgeyJ4LWFtei1jcmVkZW50aWFsIjogIkFTSUFUQjQ1SUxBNTZLSllSVUtBLzIwMjAwNzI1L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSwgeyJ4LWFtei1hbGdvcml0aG0iOiAiQVdTNC1ITUFDLVNIQTI1NiJ9LCB7IngtYW16LWRhdGUiOiAiMjAyMDA3MjVUMTAxNjMxWiJ9LCB7IngtYW16LXNlY3VyaXR5LXRva2VuIjogIklRb0piM0pwWjJsdVgyVmpFT3YvLy8vLy8vLy8vd0VhQ1hWekxXVmhjM1F0TVNKSE1FVUNJRXlKOElRd1ViVXBOaEh4OEw4aGI5S2l0bFQvWnIyUGtpUmZlUXV2ZGNsS0FpRUFnTm5pT2dySVZBeEtGbXh0aWlDL0hVRllESmNWTGNvazB6MVNYYkw5OHd3cXZRTUlvLy8vLy8vLy8vLy9BUkFBR2d3eU1UQXlORFl6TWpZek16RWlEQXJxVWNjaXJGZlVReW9iUlNxUkEyV0UwNDJQQUtYT1grWTdubVg1NlZUNyt6ek50Wm5mUUF1N2sxN1MwUkRLeFNRQktWOVcvM29rVEIvbGcwTi94MC8xdHk1eVh4NEswcjlKSUtLb2p1bzlWTE5GM3c2NnZFSjJLd3RQTlNzcHR1N3ZnRkhCT0pLVnphRU9CcGZrMENOZlArQjFmbkl3dW5xZ0VwdEFzQ2NVRlhBd0tXaWQ2WlNZNC9Vd21RRGdJOXBQN2VSVFl1VzVzOS9ta3lXb3dPaDdueTIzby9pTTBUWFgvNi9jSUszY2NhSWgySW15Z2FacHBQd3Y4VFZnZDcrRzBRektmR20vMnFndnBmRmF6bktaTXI5R1dsR1FHYncvdnFCNUZzUFd3VDhJNHFnTndxLzdnNnh2TW5pVS91dmtvcy9zTWhWU3ZtMFZHY3A2YWl4dFNTUUx1c29PVHc4L1h3UUZpN3lKOThQVWZQN1FHbnZFNUsyY1l0ek12Q3BEQWtIcW8rUWl5Ri9ScWpyWSsrYVJMbTdMRUs3eitUOHdpRE4wRUNrUng4L0VONy9RUEdrWHVoUGpvU0RMZEtDd1NqSUlGcjZhMEY0encwUi9OVDZTTE5XWkt5Qms2a0FiTUVFQzlBdTBMOERRTWl6TEYzZ0R1L21TS09wblBmL2pJMTIvMnR1N29GMHFyc3MyZ1l3eUxzTHltUmhyR2lCWUYxcFdZMGJ3TU9LTDhQZ0ZPdXNCQjh2YVFmVGY4cDdkVEVoM0FxOUxycDV0d2l3L1VNenpQWENsQTJ6Zi94b3Vkakw1dXVZN0RjMWpuUm50bW5mMjI3ZXc0US95R2RLT2JQd2ZLUWpTWFhmNnJKVENBcGxhRGltT1lKdHJtVWRqbDEwT0lGQTdpOVZpRkN0N21BSGRXTmF5c0h0NllIN2wya2VBVkNqOHR1NTFuQjdMOFhSM0ZicmNIeUVhT2tBWjAvbWs4QkEvdE5BeWg4THh1QU5ORW85R0tiTVIxMkU4K1BjUm91M1NzUkJVc0tSM2FzWUliK3BPZVQ4RGZiTEw3TE5tUnk3a3NkbE55cjBZVHovekJNU2hTTnlHM0ZzcXRlUkRJQUt5WjBJTjFsL1Zybzd5U3hNMVZEWUNpSHA0WXVZRVdEcUNWK25FTFE9PSJ9LCB7InN1Y2Nlc3NfYWN0aW9uX3N0YXR1cyI6ICIyMDEifSwgWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsIDAsIDEwNDg1NzYwXSwgeyJ4LWFtei1tZXRhLWV4dCI6ICJqcGcifSwgeyJjb250ZW50LXR5cGUiOiAiaW1hZ2UvanBlZyJ9XSwgImV4cGlyYXRpb24iOiAiMjAyMC0wNy0yNVQxMDoxNzozMVoifQ==
X-Amz-Signature: 18de764fb3ad057835da968d306f50897017be805192ae14814f5b7c64e8afd3
x-amz-security-token: IQoJb3JpZ2luX2VjEOv//////////wEaCXVzLWVhc3QtMSJHMEUCIEyJ8IQwUbUpNhHx8L8hb9KitlT/Zr2PkiRfeQuvdclKAiEAgNniOgrIVAxKFmxtiiC/HUFYDJcVLcok0z1SXbL98wwqvQMIo///////////ARAAGgwyMTAyNDYzMjYzMzEiDArqUccirFfUQyobRSqRA2WE042PAKXOX+Y7nmX56VT7+zzNtZnfQAu7k17S0RDKxSQBKV9W/3okTB/lg0N/x0/1ty5yXx4K0r9JIKKojuo9VLNF3w66vEJ2KwtPNSsptu7vgFHBOJKVzaEOBpfk0CNfP+B1fnIwunqgEptAsCcUFXAwKWid6ZSY4/UwmQDgI9pP7eRTYuW5s9/mkyWowOh7ny23o/iM0TXX/6/cIK3ccaIh2ImygaZppPwv8TVgd7+G0QzKfGm/2qgvpfFaznKZMr9GWlGQGbw/vqB5FsPWwT8I4qgNwq/7g6xvMniU/uvkos/sMhVSvm0VGcp6aixtSSQLusoOTw8/XwQFi7yJ98PUfP7QGnvE5K2cYtzMvCpDAkHqo+QiyF/RqjrY++aRLm7LEK7z+T8wiDN0ECkRx8/EN7/QPGkXuhPjoSDLdKCwSjIIFr6a0F4zw0R/NT6SLNWZKyBk6kAbMEEC9Au0L8DQMizLF3gDu/mSKOpnPf/jI12/2tu7oF0qrss2gYwyLsLymRhrGiBYF1pWY0bwMOKL8PgFOusBB8vaQfTf8p7dTEh3Aq9Lrp5twiw/UMzzPXClA2zf/xoudjL5uuY7Dc1jnRntmnf227ew4Q/yGdKObPwfKQjSXXf6rJTCAplaDimOYJtrmUdjl10OIFA7i9ViFCt7mAHdWNaysHt6YH7l2keAVCj8tu51nB7L8XR3FbrcHyEaOkAZ0/mk8BA/tNAyh8LxuANNEo9GKbMR12E8+PcRou3SsRBUsKR3asYIb+pOeT8DfbLL7LNmRy7ksdlNyr0YTz/zBMShSNyG3FsqteRDIAKyZ0IN1l/Vro7ySxM1VDYCiHp4YuYEWDqCV+nELQ==
file: (binary)

If I use a pre-existing url then this works without issue




Aucun commentaire:

Enregistrer un commentaire