Уведомления

Группа в Telegram: @pythonsu

#1 Июль 14, 2017 12:46:38

ivan342
Зарегистрирован: 2016-02-28
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Запрос к сайту через requests

Помогите пожалуйста разрбраться, как с помощью requests запросить данные о текущем статусе доставки.
Смотрел какие запросы посылает сайт, но не могу сообразить как он генерирует запрос (запрос генерится с помощью js).
На сколько я понял, функция отвечающая за отправку формы находится в файле https://www.cdek.ru/website/edostavka/template/js/custom.min.js?v63 и называется _getDataByInvoice.

Сайт https://www.cdek.ru/track.html?order_id=1048761933, номер заказа для примера 1048761933

Пробовал вот так, но возвращается пустота, что-то не так делаю..

 import requests
 
headers = {
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'ru,en;q=0.8',
    'Connection': 'keep-alive',
    'Content-Length': '41',
    'Content-Type': 'application/octet-stream',
    'DNT': '1',
    'Host': 'www.cdek.ru',
    'Origin': 'https://www.cdek.ru',
    'Referer': 'https://www.cdek.ru/track.html?order_id=1048761933',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 YaBrowser/17.6.0.1628 Yowser/2.5 Safari/537.36',
    'X-Compress': 'null'
}
 
data = {
    'Action': 'GetTrackingInfo',
    'invoice': '1048761933',
    'phone': 'null'
}
 
resp = requests.post('https://www.cdek.ru/ajax.php', data, headers=headers)
print(resp.text)
print(resp.status_code)

Отредактировано ivan342 (Июль 14, 2017 13:08:29)

Офлайн

#2 Июль 15, 2017 18:24:11

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

Запрос к сайту через requests


 import requests
import json
s = requests.Session()
data_json = {'Action': 'GetTrackingInfo', 'invoice': '1048761933'}
r = s.post('https://www.cdek.ru/ajax.php?JsHttpRequest=15000505001993-xml', data=data_json)
>>> json.loads(r.text)
{'id': '15000505001993', 'js': {'Content': {'canBeChanged': False, 'tariffDateEnd': '17.07.2017', 'trackingDetails': [{'cityCode': '32696', 'statusName': 'В транзитном городе', 'cityName': 'Воронеж (На Ленинградской)', 'date': '13.07.2017'}, {'cityCode': '32696', 'statusName': 'Отправлен в транзитный город', 'cityName': 'Воронеж (На Ленинградской)', 'date': '13.07.2017'}, {'cityCode': '506', 'statusName': 'Принят в городе отправителя', 'cityName': 'Воронеж', 'date': '13.07.2017'}, {'cityCode': '506', 'statusName': 'Отправлен в город получателя', 'cityName': 'Воронеж', 'date': '14.07.2017'}, {'cityCode': '506', 'statusName': 'Принят в городе отправителя', 'cityName': 'Воронеж', 'date': '14.07.2017'}, {'cityCode': '506', 'statusName': 'Отправлен в город получателя', 'cityName': 'Воронеж', 'date': '14.07.2017'}, {'cityCode': '44', 'statusName': 'Принят в городе получателя', 'cityName': 'Москва', 'date': '14.07.2017'}, {'cityCode': '44', 'statusName': 'На доставке у курьера', 'cityName': 'Москва', 'date': '14.07.2017'}, {'cityCode': '44', 'statusName': 'Вручен: ООО «Мотокаталог»', 'cityName': 'Москва', 'date': '14.07.2017'}], 'orderDate': '13.07.2017', 'currentDateTimeCityTo': '15.07.2017 18:16:12', 'receiverAddress': 'Огородный проезд, д.2А, -', 'status': {'name': 'Вручен', 'code': 'status_general_success'}, 'cityTo': {'id': '44', 'name': 'Москва'}, 'orderNumber': '1048761933', 'cityFrom': {'id': '506', 'name': 'Воронеж'}, 'storageDateEnd': '28.07.2017'}, 'SpeedID': '16349946'}, 'text': ''}
>>>

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version