使用python请求对web抓取进行JWT承载授权

使用python请求对web抓取进行JWT承载授权,python,python-requests,jwt,Python,Python Requests,Jwt,这是我在StackOverflow上的第一篇帖子,请耐心等待 我正在编写一个函数,该函数通过RESTAPI发出请求,然后返回值,但身份验证部分遇到了问题 身份验证是一个JWT承载令牌,需要它来检索数据(尽管我不需要登录,因此它是一个未经授权的API) 我试图向该网站提出请求https://www.dextools.io并获取任何JWT令牌,但使用会话似乎不起作用 也许它并不重要,但当我转到开发者工具>本地存储>(网站url)>t时,我可以在浏览器上找到这个JWT令牌,其中t包含我的EYJXXXX

这是我在StackOverflow上的第一篇帖子,请耐心等待

我正在编写一个函数,该函数通过RESTAPI发出请求,然后返回值,但身份验证部分遇到了问题

身份验证是一个JWT承载令牌,需要它来检索数据(尽管我不需要登录,因此它是一个未经授权的API)

我试图向该网站提出请求
https://www.dextools.io
并获取任何JWT令牌,但使用会话似乎不起作用

也许它并不重要,但当我转到
开发者工具>本地存储>(网站url)>t
时,我可以在浏览器上找到这个JWT令牌,其中
t
包含我的EYJXXXXXXXXXXXXXX令牌


任何帮助都将不胜感激,谢谢。

您好,看到网站的网络请求,我可以通过下面的代码获取数据,但是如果网站阻止它,您可能需要获取新密码。下面生成的jwt令牌有效期为6到8分钟。您可以重复使用jwt令牌,直到那时,然后您需要通过调用该返回登录url获取新的jwt令牌就像下面代码中提到的

代码:

输出:

如果您有任何问题,请告诉我:)

def get__price(jwt, cookie):

    headers = {
        'authority': 'www.dextools.io',
        'pragma': 'no-cache',
        'cache-control': 'no-cache',
        'accept': 'application/json',
        'authorization': f'Bearer {jwt}', # HERE IS THE VAR I NEED
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
        'content-type': 'application/json',
        'sec-gpc': '1',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-mode': 'cors',
        'sec-fetch-dest': 'empty',
        'referer': 'https://www.dextools.io/app/uniswap/pair-explorer/0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852',
        'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8',
        #'cookie': f'__cfduid={cookie}; ai_user=hizb^|2021-04-03T00:16:45.460Z; ai_session=5vAmv^|1617443356577.045^|1617443356577.045',
        }

    params = (
        ('v', '1.9.1'),
        ('pair', '0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852'),
        ('ts', '1617443384-0')
    )

    try:
        response = requests.get('https://www.dextools.io/api/uniswap/1/pairexplorer', headers=headers, params=params)
    except Exception as e:
        print(f"ERROR: {e}")
import time
import requests

s = requests.session()

headersdict = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
    'Referer': 'https://www.dextools.io/app/uniswap/pair-explorer/0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852',
    'Origin': 'https://www.dextools.io'}
s.headers.update(headersdict)
payload = {"id": "anyone", "password": "TfY6WC6F4L4+S6xwvPo8QoHlYZ50rK2DrJnEAWBoMqU="}#you can use this password to generate new jwt tokens if it blocks you check network requests and get this password again but i dont think they will block it that way.
s1 = s.post("https://www.dextools.io/back/user/login", json=payload)
jwt = s1.headers["X-Auth"]

headersdict = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
    'Referer': 'https://www.dextools.io/app/uniswap/pair-explorer/0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852',
    'Origin': 'https://www.dextools.io',
    'authorization': f'Bearer {jwt}'}
s.headers.update(headersdict)
params = (
    ('v', '1.9.1'),
    ('pair', '0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852'),
    ('ts', f'{time.time()}-0')
)
response = s.get('https://www.dextools.io/api/uniswap/1/pairexplorer', params=params)
print(response.text)