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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:25:20