REST API调用中字符串数组的正确格式及调试方法
Deviant Art API标签数组参数传递问题
我正在调用Deviant Art的REST API,API文档说明tags参数为array[string]类型(可选,用于描述提交内容,仅允许字母、数字和下划线,最小长度1)。但我对REST API不熟悉,始终没能正确传递字符串数组。
我试过两种写法都无效:
- 直接用逗号分隔:
item1, item2, item3 - JSON数组格式:
["item1", "item2", "item3"]
以下是我的Julia代码片段,原本直接传递数组不行,现在尝试把标签转成字符串形式,但问题仍未解决:
headers = [] data = convert_to_dict(params) data["attachment"] = io data["access_token"] = token.access_token quoted_tags = map(tag->"\"$tag\"", params.tags) tags_str = "[" * join(quoted_tags, ",") * "]" data["tags"] = tags_str body = HTTP.Form(data) resp = HTTP.post(url, headers, body) body = HTTP.payload(resp)
正确的参数传递方式
由于你使用的是表单提交(HTTP.Form),Deviant Art API遵循表单数组的通用格式:需要将参数名设为tags[],然后直接传递数组即可。HTTP.jl会自动将数组拆分为多个tags[]=标签值的键值对,这和API控制台里的示例格式一致。
修改后的代码:
headers = [] data = convert_to_dict(params) data["attachment"] = io data["access_token"] = token.access_token # 直接传递数组,参数名改为tags[] data["tags[]"] = params.tags body = HTTP.Form(data) resp = HTTP.post(url, headers, body) body = HTTP.payload(resp)
调试思路
- 参考API控制台示例:你提到的API控制台中,标签参数的编码形式是
tags%5B%5D=black,解码后就是tags[]=black,这已经明确了正确的参数格式。 - 抓包对比请求:用浏览器开发者工具或Wireshark捕获API控制台发送的请求,对比自己代码发送的请求,查看参数结构的差异。
- 用curl测试基础请求:先手动构造curl命令验证请求有效性,再转成Julia代码:
curl -X POST "你的API地址" \ -F "access_token=你的令牌" \ -F "tags[]=black" \ -F "tags[]=hot" \ -F "attachment=@本地图片路径" - 查阅HTTP.jl文档:确认HTTP.jl对
Form中数组类型参数的处理规则,是否需要特定的键名格式。
内容的提问来源于stack exchange,提问作者Erik Engheim
相关产品推荐
相关产品推荐

