'Python: open a video file from an url the same way open("filepath", "rb") does for local files

I want to upload short videos through an API connection (which one is not relevant for the question). The videos that will be uploaded are already on a server (publicly accessible, so that is not the issue) with a direct link (eg: 'https://nameofcompany.com/uploads/videoname.mp4").

I am using the Requests library, so the post request looks like this:

requests.post(url, files={'file': OBJECT_GOES_HERE}, headers=headers)

The object should be a 'bytes-like object', so with a local file we can do:

requests.post(url, files={'file': open('localfile.mp4', 'rb')}, headers=headers)

I tested this with a local file and this works. However, as mentioned I need to upload it from the link, so how do I do that? Is there some method (or some library with a method) that would return the same type of response like the open() method does for local files? If not, how could I create one myself?



Solution 1:[1]

import requests
from io import BytesIO

url = 'https://nameofcompany.com/uploads/videoname.mp4'

r = requests.get(url)

video = r.content

# This is probably enough:
requests.post(url2, files={'file': video}, headers=headers)

# But if not, here's an example of using BytesIO to treat bytes as a file:
requests.post(url2, files={'file': open(BytesIO(video), 'rb')}, headers=headers)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 BeRT2me