Мое понимание 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), но, похоже, не могу связать это с тем, что я пытаюсь сделать. Спасибо.