且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用 Python 请求从本地 url 获取文件?

更新时间:2023-02-23 21:13:22

正如@WooParadog 所解释的,请求库不知道如何处理本地文件.虽然,当前版本允许定义传输适配器.

As @WooParadog explained requests library doesn't know how to handle local files. Although, current version allows to define transport adapters.

因此,您可以简单地定义自己的适配器来处理本地文件,例如:

Therefore you can simply define you own adapter which will be able to handle local files, e.g.:

from requests_testadapter import Resp

class LocalFileAdapter(requests.adapters.HTTPAdapter):
    def build_response_from_file(self, request):
        file_path = request.url[7:]
        with open(file_path, 'rb') as file:
            buff = bytearray(os.path.getsize(file_path))
            file.readinto(buff)
            resp = Resp(buff)
            r = self.build_response(request, resp)

            return r

    def send(self, request, stream=False, timeout=None,
             verify=True, cert=None, proxies=None):

        return self.build_response_from_file(request)

requests_session = requests.session()
requests_session.mount('file://', LocalFileAdapter())
requests_session.get('file://<some_local_path>')

我在上面的例子中使用了 requests-testadapter 模块.

I'm using requests-testadapter module in the above example.