Подделка HTTP Получить запрос на скачивание изображения - PullRequest
0 голосов
/ 30 апреля 2018

Попытка получить изображение с этого сайта http://traffic.ottawa.ca/map/camera?id=95. Но как бы я ни старался, всегда получайте изображение с отказом в доступе вместо реального

Вот что я попробовал:

import shutil
import requests
from fake_useragent import UserAgent
ua = UserAgent()

header = {'User-Agent': str(ua.chrome)}
url = "http://traffic.ottawa.ca/map/camera?id=95"
response = requests.get(url, headers=header, stream=True)

with open('img1.png', 'wb') as out_file:
    shutil.copyfileobj(response.raw, out_file)

Также попытался использовать Selenium

from selenium import webdriver
from selenium.webdriver import ActionChains, DesiredCapabilities
from selenium.webdriver.common.keys import Keys

url = 'http://traffic.ottawa.ca/map/camera?id=95'

desired_capabilities = DesiredCapabilities.CHROME.copy()
desired_capabilities['chrome.page.customHeaders.User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
driver = webdriver.Chrome(desired_capabilities=desired_capabilities)
driver.get(url)
actionChains = ActionChains(driver)

actionChains.key_down(Keys.CONTROL).send_keys('S').key_up(Keys.CONTROL)
actionChains.perform()

Как правильно подделать запрос, я думал, что все дело в агенте пользователя, но, видимо, это не так?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Как объяснил Слава Князев , добавив печенье, решил проблему. Вот окончательный код

import shutil
import requests
from fake_useragent import UserAgent
ua = UserAgent()

header = {'User-Agent': str(ua.chrome)}
url = "http://traffic.ottawa.ca/map/camera?id=95"
cookie = {'JSESSIONID': '0416883CFBE4DAB71539DCCCA05C584D'}

response = requests.get(url, headers=header, stream=True, cookies=cookie)

with open('img1.png', 'wb') as out_file:
    shutil.copyfileobj(response.raw, out_file)
0 голосов
/ 30 апреля 2018

Кажется, что он заблокирован с помощью cookie, который устанавливается веб-сайтом. Следующие работы (или, возможно, не всякий раз, когда вы нажимаете на него):

curl -v --cookie "JSESSIONID=0416883CFBE4DAB71539DCCCA05C584D" http://traffic.ottawa.ca/map/camera\?id\=2025 -o image

Вы можете просмотреть значение JSESSIONID из ваших инструментов разработчика. Теперь, когда вы знаете, что проблема заключается в том, что вы можете использовать выбранное решение, чтобы получить действительный файл cookie, используя выбранную вами библиотеку.

...