Мой браузер может загрузить файл (с URL), но Python запрашивает, и PyCurl получает ошибку «Соединение было сброшено». Как исправить? - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь загрузить несколько больших файлов с сервера через URL.

При загрузке файла через Chrome или Inte rnet Explorer загрузка файла занимает около 4-5 минут, размер которого составляет около 100 МБ.

Но когда я попробуйте сделать то же самое, используя PyCurl

buffer = BytesIO()
ch = curl.Curl()
ch.setopt(ch.URL, url)
ch.setopt(curl.TRANSFERTEXT, True)
ch.setopt(curl.AUTOREFERER, True)
ch.setopt(curl.FOLLOWLOCATION, True)
ch.setopt(curl.POST, False)
ch.setopt(curl.SSL_VERIFYPEER, 0)
ch.setopt(curl.WRITEFUNCTION, buffer.write)
ch.perform()

или используя запросы

r = requests.get(url).text

Я получаю

'pycurl.error: (56, 'OpenSSL SSL_read: Connection was reset, errno 10054')'

или

 '[Errno 10054] An existing connection was forcibly closed by the remote host.'

Когда я смотрю в Chrome во время загрузки большого файла, это то, что я вижу

 General:
 Referrer Policy: no-referrer-when-downgrade 

Requests Header:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cache-Control: no-cache
Connection: keep-alive 
Cookie : JSESSIONID = ****
Pragma: no-cache
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/... (KHTML, like Gecko) Chrome/... Safari/...

Есть ли что-то, что я могу сделать в моей конфигурации, чтобы не закрывать соединение, аналогично тому, когда я получить доступ к нему через мой браузер? Или это на стороне сервера проблема?

РЕДАКТИРОВАТЬ

Чтобы добавить дополнительную информацию. Большая часть времени после выполнения запроса тратится на ожидание, пока сервер соберет данные, прежде чем начнется фактическая загрузка (он генерирует файл XML путем агрегирования данных из разных источников данных).

1 Ответ

0 голосов
/ 12 февраля 2020

Попробуйте добавить заголовки и файлы cookie к вашему запросу.

headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" } 
cookies = { "Cookie1": "Value1"} 


r = requests.get(url, headers=headers, cookies=cookies)
...