время ожидания запросов python.get (url) истекло, но работает в браузере (chrome); как я могу адаптировать заголовки запросов для определенного хоста?

#python #python-requests #user-agent

#python #python-запросы #user-agent

Вопрос:

Я пытаюсь загрузить файл с помощью модуля запросов python, мой код работает для некоторых URL-адресов / хостов, но я наткнулся на тот, который не работает.

Основываясь на других подобных вопросах, это может быть связано с заголовком запроса User-Agent, я попытался исправить, добавив chrome user-agent, но время ожидания соединения по-прежнему истекает для этого конкретного URL (это работает для других).

Я протестировал открытие URL в браузере chrome (который работает нормально) и проверку заголовков запросов, но я все еще не могу понять, почему мой код дает сбой:

 import requests
url = 'http://publicdata.landregistry.gov.uk/market-trend-data/house-price-index-data/Indices-2020-03.csv'
headers = {'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}

session = requests.Session()
session.headers.update(headers)
response = session.get(url, stream=True)
# !!! code fails here for this particular url !!!

with open('test.csv', "wb") as fh:
    for x in response.iter_content(chunk_size=1024):
        if x: fh.write(x)
  

Обновление 2020-08-14
Я выяснил, что было не так; в тех случаях, когда код работал, URL-адреса использовали протокол https. Этот URL-адрес является протоколом http, и настройки моего прокси-сервера не были настроены для http, только https. После предоставления http-прокси для запросов мой код работал так, как написано.

Ответ №1:

Опубликованный вами код сработал для меня, он сохранил файл (129007 строк). Возможно, хост ограничивает скорость, повторите попытку позже, чтобы убедиться, что это работает.

 # count lines 
$ wc -l test.csv 
129007 test.csv

# inspect headers
$ head -n 4 test.csv
Date,Region_Name,Area_Code,Index
1968-04-01,Wales,W92000004,2.11932727
1968-04-01,Scotland,S92000003,2.108087275
1968-04-01,Northern Ireland,N92000001,3.300419757
  

Комментарии:

1. Спасибо, что нашли время попробовать код. Я, наконец, выяснил, что было не так, и запустил код. Проблема была связана с настройками прокси-сервера https или http. Мой код ранее нормально выполнялся для URL-адресов https, но этот конкретный URL был http, и http-прокси не предоставлялся.

Ответ №2:

Вы можете отключить время ожидания запросов, передав timeout=None . Вот официальная документация: https://requests.readthedocs.io/en/master/user/advanced/#timeouts

Комментарии:

1. Спасибо, я пробовал это, но получаю ту же ошибку. Скорее всего, хост не отвечает.

2. Интересно, вы пытаетесь запустить скрипт python с того же хоста, с которого вы запускаете тесты своего браузера? Я бы посоветовал также попробовать curl из командной строки и посмотреть, работает ли это.