Невозможно повторить запрос AJAX для очистки - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь очистить данные с сайта, но контент добавляется динамически. Я использую Python и библиотеку requests. Вот ссылка на пример https://www.goat.com/sneakers/off-white-x-air-presto-aa3830-002

url = 'https://www.goat.com/web-api/graphql'  # the API endpoint

# replicate the header in Chrome debugger tool of the successful request
headers = {  
        ':authority': 'www.goat.com',
        ':method': 'POST',
        ':path': '/web-api/graphql',
        ':scheme': 'https',
        "accept": "application/json",
        "accept-encoding": "gzip, deflate, br",
        "accept-language": "vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5",
        "content-length": "1153",
        "content-type": "application/json",
        "origin": "https://www.goat.com",
        "referer": "https://www.goat.com/sneakers/off-white-x-air-presto-aa3830-002",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
    }

# the request payload from Chrome debugger tool
data = {"query":'{\n    viewer {\n      productTemplate(slug: \"off-white-x-air-presto-aa3830-002\") {\n        id\n        internal_shot\n        details\n        name\n        original_picture_url\n        sku\n        slug\n        story\n        is_active\n        release_date\n        color\n        special_type\n        upper_material\n        lowest_price_cents\n        new_lowest_price_cents\n        can_return\n        brand {\n          id\n          name\n        }\n        size_brand\n        midsole\n        designer\n        nickname\n        silhouette\n        gender\n        formatted_available_sizes_new_v2 {\n          size\n          price_cents\n          box_condition\n          shoe_condition\n        }\n        product_template_additional_pictures {\n          attribution_url\n          original_picture_url\n          source_url\n        }\n        selling_count\n        used_for_sale_count\n        used_lowest_price_cents\n        goat_clean_for_sale_count\n        new_lowest_price_cents\n        with_defect_for_sale_count\n        category\n      }\n    }\n  }',
"variables":{"slug":"off-white-x-air-presto-aa3830-002"}}

r = session.post(url, headers=headers, data=data)
print(r.text)

Запрос POST, отправленный на сервер, возвратил Internal Server Error (500), однако браузер выполняет его нормально и данные извлекаются .

Я чувствую, что что-то упустил, особенно в части query полезной нагрузки. Пожалуйста, скажите мне, почему это происходит. Я очень ценю!

1 Ответ

0 голосов
/ 04 ноября 2018

Мне наконец удалось это выяснить. Конечная точка принимает только JSON в качестве данных и неправильно выполняет обычный запрос (почему возникает ошибка 500).

Итак, вот код, который работает:

Заменить

r = session.post(url, headers=headers, data=data)

с

r = session.post(url, headers=headers, json=data)

И это работает как шарм!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...