SAXO OpenAPI认证:Python GET请求与CURL输出不符问题排查
问题根源:两段请求的核心差异点
1. 参数传递位置完全不同
- curl请求:所有认证参数(
response_type、client_id、state、redirect_uri)都放在URL的查询字符串(?之后的部分)中,这是GET请求传递参数的标准方式,SAXO的认证端点会从这里读取参数。 - Python代码:使用
data=data传递参数,但requests库中,GET请求的data参数会把数据放到**请求体(body)**里,而非URL查询字符串。SAXO的认证端点不支持从请求体读取GET请求的参数,因此无法识别你传递的参数,返回400错误。
2. 不必要的请求头干扰
- curl里的
Content-Type: application/x-www-form-urlencoded头是多余的——GET请求没有请求体,这个头实际不起作用。 - Python代码中同样添加了这个头,但GET请求带请求体不符合HTTP规范,服务器可能会因为头信息和实际请求内容不匹配而拒绝请求。
修正后的Python代码
要和curl请求逻辑完全一致,需要用params参数传递(requests会自动把字典转为URL查询字符串),同时移除不必要的请求头:
import requests def authenticate(config: dict = None): if config is None: return False endpoint = config['AuthorizationEndpoint'] params = {'response_type': 'code', 'client_id': config['client_id'], 'state': 'y90dsygas98dygoidsahf8sa', 'redirect_uri': config['url']} response = requests.get(url=endpoint, params=params) print(response) config = {'AuthorizationEndpoint': 'https://sim.logonvalidation.net/authorize', 'client_id': '37656c896c424f8cab64774e603bc927', 'url': 'http://localhost/myAppTest'} authenticate(config)
内容的提问来源于stack exchange,提问作者apt45
相关产品推荐
相关产品推荐

