You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用Experian API遇401错误求排查,能否弃用JSON?

对接Experian API遇到401错误,代码是否存在问题?能否仅用Python不用JSON实现?

我正在开发一款Web应用,这是首次对接外部API服务器。我熟悉Python和脚本编写,当前优先验证数据获取功能,之后再构建UX等其他功能,但401错误卡住了进度。想请教两个问题:

  • 我的代码是否存在问题?
  • 能否仅使用Python而不用JSON来实现?

我的代码

import requests
import json
import time


# Configuration
CLIENT_ID = "CODE"
CLIENT_SECRET = "CODE"
USERNAME = "USERNAME"
PASSWORD = "PASSWORD"
BASE_URL = "https://sandbox-us-api.experian.com"

# Global variables to store tokens
access_token = None
refresh_token = None

def request_access_token():
    global access_token, refresh_token
    url = f"{BASE_URL}/oauth2/v1/token"
    headers = {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    }
    data = {
        "username": USERNAME,
        "password": PASSWORD,
        "client_id": CLIENT_ID,
        "client_secret": CLIENT_SECRET,
        "grant_type": "password"
    }

    response = requests.post(url, headers=headers, data=json.dumps(data))

    if response.status_code == 200:
        tokens = response.json()
        access_token = tokens.get("access_token")
        refresh_token = tokens.get("refresh_token")
        print("Access Token:", access_token)
        print("Refresh Token:", refresh_token)
    else:
        print("Failed to get access token. Status code:", response.status_code)
        print("Response:", response.json())

def refresh_access_token():
    global access_token, refresh_token
    url = f"{BASE_URL}/oauth2/v1/token"
    headers = {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    }
    data = {
        "client_id": CLIENT_ID,
        "client_secret": CLIENT_SECRET,
        "grant_type": "refresh_token",
        "refresh_token": refresh_token
    }

    response = requests.post(url, headers=headers, data=json.dumps(data))

    if response.status_code == 200:
        tokens = response.json()
        access_token = tokens.get("access_token")
        refresh_token = tokens.get("refresh_token")
        print("New Access Token:", access_token)
        print("New Refresh Token:", refresh_token)
    else:
        print("Failed to refresh token. Status code:", response.status_code)
        print("Response:", response.json())

def revoke_token(token):
    url = f"{BASE_URL}/oauth2/v1/revokeToken"
    headers = {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    }
    data = {
        "client_id": CLIENT_ID,
        "client_secret": CLIENT_SECRET,
        "token": token
    }

    response = requests.post(url, headers=headers, data=json.dumps(data))

    if response.status_code == 200:
        print("Token successfully revoked.")
    else:
        print("Failed to revoke token. Status code:", response.status_code)
        print("Response:", response.json())

def make_api_call():
    global access_token
    url = f"{BASE_URL}/business/score/v2/directors"
    headers = {
        'Accept': 'application/json',
        'Authorization': f'Bearer {access_token}'
    }

    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        print("API response:", response.json())
    else:
        print("Failed to fetch data. Status code:", response.status_code)
        print("Response:", response.json())

# Main workflow
if __name__ == "__main__":
    # Step 1: Request Access Token
    request_access_token()

    # Simulate waiting for token expiration
    time.sleep(5)  # Wait for 5 seconds (in real use, wait until token is about to expire)

    # Step 2: Use Bearer Token
    make_api_call()

    # Step 3: Refresh Access Token
    refresh_access_token()

    # Step 4: Revoke Token
    revoke_token(access_token)

输出结果

请求访问令牌、API数据获取等步骤均返回401 Unauthorized错误。

参考文档

  • Experian开发者入门指南
  • Business API官方文档

内容的提问来源于stack exchange,提问作者Karfear's Softwear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:35:11