调用api.ticktick.com接口返回500错误,Postman与JS代码可正常运行
TickTick API POST请求返回500错误的解决方案
问题根源在于请求体格式不匹配:Axios和Postman默认会以JSON格式发送请求体并设置正确的Content-Type,但Python的requests和Dart的http库用字典传递data/body时,默认采用表单编码格式,不符合TickTick API的预期,导致服务器返回500错误。
修复后的Python代码
直接使用json参数代替data参数,requests会自动帮你序列化JSON并设置Content-Type: application/json:
import requests headers = {'Authorization': '[access token]'} response = requests.post('https://api.ticktick.com/open/v1/task', json={'title': 'mytitle'}, headers=headers)
也可以手动序列化数据并指定请求头:
import requests import json headers = { 'Authorization': '[access token]', 'Content-Type': 'application/json' } data = json.dumps({'title': 'mytitle'}) response = requests.post('https://api.ticktick.com/open/v1/task', data=data, headers=headers)
修复后的Dart代码
需要将请求体序列化为JSON字符串,同时手动指定Content-Type请求头:
import 'dart:convert'; import 'package:http/http.dart' as http; // 函数内代码 var url = Uri.https('api.ticktick.com', 'open/v1/task'); var headers = { "Authorization": "[access token]", "Content-Type": "application/json" }; var body = jsonEncode({'title': 'mytitle'}); var response = await http.post(url, headers: headers, body: body);
为什么Postman和Axios能正常工作?
- Postman发送JSON请求时,会自动配置
Content-Type: application/json并正确序列化请求体。 - Axios的
data参数默认会被序列化为JSON,同时自动添加Content-Type: application/json请求头,完全匹配API的格式要求。
内容的提问来源于stack exchange,提问作者Стас Фролкин
相关产品推荐
相关产品推荐

