Мне однажды удалось удалить некоторые защищенные страницы, используя http.client
и мой браузер.
Сначала я перешел на страницу, к которой мне нужно было получить доступ, затем, используя инструменты разработчика браузера, скопировал заголовки request и использовал их в своем сценарии. Таким образом, ваш скрипт получит доступ к ресурсам так же, как ваш браузер.
Эти два метода могут помочь вам: сначала проанализируйте HTTP-запрос, чтобы получить заголовки (запрос и тело могут * также быть полезны в зависимости от вашего случая) и используйте второй для загрузки файла.
Для работы может потребоваться небольшая настройка.
from http.client import HTTPSConnection
def parse_headers(http_post):
"""Converts a header string to a dictionnary of its attributes."""
# Regex to extract headers
req_line = re.compile(r'(?P<method>GET|POST)\s+(?P<resource>.+?)\s+(?P<version>HTTP/1.1)')
field_line = re.compile(r'\s*(?P<key>.+\S)\s*:\s+(?P<value>.+\S)\s*')
first_line_end = http_post.find('\n')
headers_end = http_post.find('\n\n')
request = req_line.match(http_post[:first_line_end]).groupdict()
headers = dict(field_line.findall(http_post[first_line_end:headers_end]))
body = http_post[headers_end + 2:]
return request, headers, body
def get_file(url, domain, headers, temp_directory):
"""
Fetches the file located at the provided URL and returns the content.
Uses `headers` to bypass auth.
"""
conn = HTTPSConnection(domain)
conn.request('GET', url, headers=headers)
response = conn.getresponse()
content_type = response.getheader('Content-Type')
content_disp = response.getheader('Content-Disposition')
# Change to whatever content type you need
if content_type != 'application/pdf':
conn.close()
return
else:
file_content = response.read()
conn.close()
return file_content
Строка заголовков должна выглядеть следующим образом:
GET /fr/backend/XXXXXXXXX/845080 HTTP/1.1
Cookie: cookie_law_consented=true; landing_page=0; _ga=GA1.2.1218703015.1546948765; _gid=GA1.2.580320014.1546948765; _jt=1.735724042.1546948764; SID=5c485bfa-3f2c-425e-a2dd-32dd800e0bb3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: br, gzip, deflate
Host: XXXXX
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.2 Safari/605.1.15
Accept-Language: fr-fr
Referer: XXXXX
Connection: keep-alive
Может меняться в зависимости от веб-сайта, но использование этих файлов позволило мне загружать файлы за логином.