XMLHttpRequest GET请求返回500错误,但curl调用正常求助
问题原因与解决方法
你的问题核心在于 curl的-u参数会自动对凭证进行Base64编码,而你在JavaScript和Python代码中直接将明文的myApiKey:放到Authorization请求头里,服务器无法正确解析这个未编码的凭证,从而返回500错误。
1. JavaScript代码修正
在Node.js环境中,需要用Buffer对myApiKey:进行Base64编码,替换原有的Authorization头设置:
var XMLHttpRequest = require('xhr2'); var request = new XMLHttpRequest(); // 对API密钥进行Base64编码 const authToken = Buffer.from('myApiKey:').toString('base64'); request.open('GET', 'https://api.racehero.io/v1/events/38247'); request.setRequestHeader('Authorization', `Basic ${authToken}`); request.setRequestHeader('Content-Type', 'application/json'); request.setRequestHeader('Accept', 'application/json'); request.onreadystatechange = function () { if (this.readyState === 4) { console.log('Status:', this.status); console.log('Headers:', this.getAllResponseHeaders()); console.log('Body:', this.responseText); } }; request.send();
2. Python代码修正
如果用Python的requests库,推荐直接使用auth参数(它会自动处理Base64编码),比手动设置请求头更可靠:
import requests url = 'https://api.racehero.io/v1/events/38247' # auth参数传入(API密钥, 空字符串),对应curl的-u myApiKey: response = requests.get(url, auth=('myApiKey', '')) print('Status:', response.status_code) print('Headers:', dict(response.headers)) print('Body:', response.text)
如果一定要手动设置请求头,同样需要先编码:
import requests import base64 url = 'https://api.racehero.io/v1/events/38247' auth_token = base64.b64encode(b'myApiKey:').decode('utf-8') headers = {'Authorization': f'Basic {auth_token}'} response = requests.get(url, headers=headers) print('Status:', response.status_code) print('Headers:', dict(response.headers)) print('Body:', response.text)
验证方式
你可以先在终端手动编码验证:
echo -n 'myApiKey:' | base64
将输出的编码字符串替换到代码的Authorization头中,测试是否能正常请求。
内容的提问来源于stack exchange,提问作者Conner
相关产品推荐
相关产品推荐

