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

下一篇: Unable to test the REST API developed with Spring Boot