cURL发布json数据,json数组和图像文件REST API测试
我正在通过cURL来处理复杂的http请求。 我使用NODEjs构建REST API,使用Express路由器和Multer中间件来处理多个主体数据和文件。
我的端点路由127.0.0.1/api/postData期望:带有字段的json数据,其中一个是json对象数组(我有嵌套猫鼬模式)和2个命名图像(png / jpg)。
我需要通过cURL使用以下5对象数据结构发送Post请求:
name String
description String
usersArray Array of json objects like: [{"id": "123"}, {"id": "456}]
imgIcon Png/Image providing /path/to/imageIcon.png
imgHeader Png/Image providing /path/to/imageHeader.png
我已经阅读了很多关于stackoverflow的线程,但所有这些都是针对特定问题的答案,一个关于卷曲后期图像的主题,另一个cURL后期数组,但并非完全一样。
我已经尝试了像POSTMAN和DHC(google chrome)这样的REST API测试工具,并且除了arraysArray字段之外,一切都很好,我使用了如下字段:
usersArray [0] {“id”:“123”} usersArray [1] {“id”:“456”}
但验证没有通过,因为json对象值被不正确地解析。
所以我决定把所有内容都放在cURL脚本中。
我试图按照以下方式编写我的cURL请求:
#!/bin/bash
curl -H 'Content-Type: application/json'
-H 'Accept: application/json' -X POST
-F "name=Foo Name Test"
--data '[{"id": "a667cc8f-42cf-438a-b9d8-7515438a9ac1"}, {"id": "7c7960fb-eeb9-4cbf-9838-bcb6bc9a3878"}]'
-F "description=Super Bar"
-F "imgIcon=@/home/username/Pictures/imgIcon.png"
-F "imgHeader=@/home/username/Pictures/imgHeader.png" http://127.0.0.1:7777/api/postData
当我在bash ./postData中运行我的cUrl脚本时
我得到这个:$警告:你只能选择一个HTTP请求!
你可以帮忙:
1)任何想法如何在cURL中编写如此复杂的HTTP REST请求
2)或者建议使用工具(如DHC,POSTMAN)来解决这个复杂的http请求。
3)或与任何想法如何写request.js节点HTTP请求库的帮助下请求库。
预先感谢所有的答案,想法和想法!
问候,JJ
您可以尝试使用POSTMAN或Google Chrome Ext应用程序进行REST API测试DHC。 但是您应该使用多维数组而不是将JSON对象用作值,这可能会在验证期间导致问题。
在DHC中试试这个:
|FIELD| |VALUE|
name 'Some name'
description 'Some description'
usersArray[0][id] 89a7df9
usersArray[1][id] dskf28f
imgIcon (select type of field "file" and upload image)
imgHeader (select type of field "file" and upload image)
上面的工作方式是:usersArray [0] [id]指定多维数组,并在位置0上放置一个对象{},其中包含键值“id”和您在value部分中分配的值。
因此usersArray [0] [id]“123”创建[{“id”:123}] usersArray [1] [id]“456”将另一个元素添加到数组中,因此数组变成:[{“id”:“123” },{“id”:“456”}]
有时你会想使用shell + curl来创建RestAPI调用,并且您可能想要将复杂的json作为数据传递。 如果你想在执行期间使用变量并创建这些数据,你最终可能会使用很多转义字符(),并且代码看起来很丑。 我也在做同样的事情,Windows PowerShell有一种方法将Dictionary | Associative Array转换为JSON,这在该领域确实有所帮助,但寻找类似的东西但找不到任何东西。 所以这是一个示例代码,可以帮助:
#!/bin/Bash
# Author Jayan@localhost.com
## Variable Declaration
email="jayan@localhost.com"
password="VerySecurePassword"
department="Department X"
## Create JSON using variables in Bash
creds="{^email^:^${email}^, ^password^:^${password}^}"
department="{^department^:^${department}^}"
authdata_crippled="{^Authenticate^:[${creds},${department}]}"
# Replace ^ with "
authdata_json_for_RestAPI_Call=$(echo ${authdata_crippled}|tr '^' '"')
# Testing syntax
# Get "jq": yum install jq OR https://stedolan.github.io/jq/
echo ${authdata_json_for_RestAPI_Call} | jq .
# Then you make API call using curl
# Eg:
curl http://hostname:port/right/endpoint/for/api/Authenticate -X POST --header "Content-Type:application/json" -d ${authdata_json_for_RestAPI_Call} --cookie-jar cookie.data
希望这可以帮助某人。
链接地址: http://www.djcxy.com/p/1335.html上一篇: cURL post json data, json array and image files REST api testing