@Mayo0

Как исправить ошибку «405 Method Not Allowed» при скачавании базы ДТП с сайта ГИБДД?

Доброго времени суток.
На сайте ГИБДД нужно скачать базу ДТП за несколько лет, но сайт разрешает скачивать единовременно данные только за 14 дней. В связи с этим было принято решения написать скрипт и скачать файлы.

В режиме разработчика в браузере chrome запрос выглядит вот так:
5a7f256eb9a40671250370.png

У меня получилась такая реализация:
import requests
payload = {"date_s":"01.11.2017","date_end":"14.11.2017","ParReg":"877","order":{"type":1,"fieldName":"dat"},"reg":["45"],"ind":"44","exportType":1}
r = requests.get("http://stat.gibdd.ru/getCardsListCSV", data = payload)
r


После выполнения выводит ошибку:
Response [405]


Я плохо разбираюсь в это сфере, поэтому даже предположить нечего.
Сайт ГИБДД - stat.gibdd.ru (В нем: Выгрузка показателей БДД -> Карточки ДТП)
  • Вопрос задан
  • 1325 просмотров
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
В оригинальном запросе Request Method POST, а вы делаете requests.get.
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
берешь fiddler и добиваешься идентичности заголовков твоего скрипта и браузера
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Mayo0 Автор вопроса
Всем спасибо, вот работающий код
import requests
import json
from fake_useragent import UserAgent
fakeBrowser = UserAgent()
urlPost = "http://stat.gibdd.ru/getCardsListCSV"
headers = {'Accept': '*/*','Accept-Encoding': 'gzip, deflate','Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7','Connection': 'keep-alive','Content-Length': '209','Cookie': '_ga=GA1.2.1355086731.1518262575; _gid=GA1.2.370010749.1518262575; JSESSIONID=5EF4597155A357022299703AF87D0DF5','Host': 'stat.gibdd.ru','Referer': 'http://stat.gibdd.ru/','X-Requested-With': 'XMLHttpRequest','Origin': 'http://stat.gibdd.ru','content-type': 'application/json;charset=utf-8','User-Agent': fakeBrowser.opera}
payload = {"data":"{\"date_s\":\"07.11.2017\",\"date_end\":\"09.11.2017\",\"ParReg\":\"877\",\"order\":{\"type\":1,\"fieldName\":\"dat\"},\"reg\":[\"45\"],\"ind\":\"44\",\"exportType\":1}"}
r = requests.post(urlPost, json=payload, headers=headers)
r.status_code
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы