Использование модуля Python Requests для выполнения аутентифицированного HTTP-запроса (возможная проблема с перекрестным источником) - PullRequest
0 голосов
/ 29 мая 2020

Мое понимание HTTP-запросов основано на c, и мне трудно работать с толпой информации HTTP. Если это дубликат, отметьте его как таковой и перейдите к другому сообщению, если оно действительно отвечает на мой вопрос. Это Python 3.8 на Windows 10, запрашивает модуль 2.22.

Если я сделаю это:

import requests

url = "https://readthedocs.org/projects/python-guide/downloads/pdf/latest/"
r = requests.get(url, stream=True)

with open('test_download_a.pdf', 'wb') as f:
    for chunk in r.iter_content(chunk_size=128):
        f.write(chunk)

... тогда появится PDF (Python Руководство) к моей машине просто отлично.

Теперь у меня есть аналогичный набор PDF-файлов, который находится на веб-сайте поставщика, который я использую, и который я могу просматривать и загружать, войдя на сайт с моими учетными данными. Итак, я решил, что могу программно получить эти PDF-файлы, как я сделал выше, также передав свои учетные данные (поддельный URL-адрес и учетные данные, конечно):

import requests
from requests.auth import HTTPBasicAuth

url = "https://secure.somevendor.org/downloadPDF?id=1"
r = requests.get(url, auth=HTTPBasicAuth('some_user', 'opensesame'), stream=True)

Но это дает ответ 403. Итак, одна вещь, которую я заметил, когда я проверял HTML для этой страницы, это то, что она имеет:

access-control-allow-origin: secure.somevendor.org

как часть свойства headers, которое определяет элемент <embed>, в котором содержится PDF-файл. . Может ли это быть причиной моей проблемы, и если да, то как мне к ней подойти? Я просмотрел множество ресурсов, объясняющих, как работает совместное использование ресурсов между разными источниками (CORS), но, похоже, не могу связать это с тем, что я пытаюсь сделать. Спасибо.

...