Как не жестко кодировать значение некоторого correlation_id в заголовках, чтобы получить требуемый ответ?

#python #python-3.x #web-scraping #python-requests

#python #python-3.x #веб-очистка #python-запросы

Вопрос:

Я пытаюсь получить разные названия продуктов с этой веб-страницы. Названия продуктов, как и в 0041-5053-005 , генерируются динамически. Однако я могу очистить их, используя xhr с соответствующими параметрами.

Для получения требуемых данных необходимо использовать следующие ключ и значение в заголовках.

 headers = {
    'client_secret': '',
    'client_id': '',
    'correlation_id': '0196e1f2-fb29-0modod-6125-fcbb6c2c69c1',
}
 

Вот как я очистил заголовки:

 import requests

link = "https://es-be-ux-search.cloudhub.io/api/ux/v2/search?"

payload = {
    'queryText': '*:*',
    'role': 'rockwell-search',
    'spellingCorrect': 'true',
    'spellcheckPremium': '10',
    'segments': 'Productsv4',
    'startIndex': 0,
    'numResults': 10,
    'facets': '',
    'languages': 'en',
    'locales': 'en_GLOBAL,en-US',
    'sort': 'cat_a',
    'collections': 'Literature,Web,Sample_Code',
    'site': 'RA'
}

with requests.Session() as s:
    r = s.get(link,params=payload,headers=headers)
    for item in r.json()['response']['docs']:
        print(item['catalogNumber'])
 

Я заметил, что значение client_secret и client_id является статическим, но значение correlation_id изменяется.

Как я могу использовать значение correlation_id в заголовках без жесткого кодирования?

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

1. Я думаю, что correlation_id здесь — это то, что генерируется веб-страницей, я бы не стал слишком беспокоиться об этом, если он работает.

2. Вы, вероятно, не хотите делиться этим client_secret публично — это секрет по какой-то причине!

Ответ №1:

Идентификатор корреляции используется для сопоставления HTTP-запросов между клиентом и сервером. Подробнее о том, как это работает, см. В этой статье. Похоже, что этот API требует, чтобы идентификатор корреляции присутствовал в заголовках HTTP, но не изменяет ответ на основе его значения. Ответ тот же, если вы даете пустую строку:

 headers = {
    'client_secret': '...',
    'client_id': '...',
    'correlation_id': '',
}
 

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

1. Спасибо за ваш ответ @joedeandev. Я мог бы понять, как correlation ID это работает, но все же я хотел бы знать, как я могу проанализировать значение correlation ID . К вашему сведению, я могу проанализировать значение client_secret и client_id , хотя я жестко закодировал их здесь.

2. @robots.txt Что вы имеете в виду, говоря «проанализировать значение»? Если вы хотите получить значение, отправленное сервером во время запроса, вы можете попробовать прочитать заголовки в объекте ответа: requests.readthedocs.io/en/master/api /. … Идентификатор корреляции определяется и используется исключительно сервером; Я не понимаю, для чего именно он вам нужен.