我正在尝试在ROBOT框架中传递以下API请求:
curl --request POST --url <API End Point> --form 'mldata={"id": “idname”, "author": “author name, "title": “title name, "description": “description details“, "version": "0.0.4", "image": “/path/to/image”, "icon": "base64 encoded image"};type=application/json' --header "Authorization: <Bearer Token>”
在ROBOT框架[版本:3.2.2]中编写了相同的内容,但得到了error: "status=400, reason=Bad Request body={"message":"Request is not a multipart request!"}"
strongtext
我似乎没有以正确的方式传递表单数据请求帮助传递表单数据[--表单'mldata={quot;id":"idname","author":"author name,"title":"title name,"description":"description details","version":"0.0.4&","image":"/path/to/image","icon":"base64编码的image"quot;};type=application/json']。
我应该如何以正确的方式通过?
Onboard ML From External Repo
[Arguments] ${token}=default
Create Session session ${host}
${data}= Create Dictionary id=${id} author=${author} title=${title} description=${description} version=${version} image=${repo_path}
${form_data}= Evaluate {'mldata=': ${data}}
${header}= Create Dictionary Authorization=${token}
${response}= Post Request session /v1/ml data=${form_data} headers=${header}
Should Be Equal As Strings ${response.status_code} 200
我尝试了下面的代码,它成功了。我对原来的帖子做了两处修改。
- 不创建字典,而是直接评估所有项
- 在后请求中传递"文件"而不是"数据",对于多表单请求,需要文件
Onboard ML From External Repo
[Arguments] ${token}=default
Create Session mxesession ${host}
# ${data}= Create Dictionary id=${id} author=${author} title=${title} description=${description} version=${version} image=${repo_path} "icon": ${icon_image}
${form_data}= Evaluate {'mldata': (None,'{"id": "${id}", "author": "${author}", "title": "${title}", "description": "${description}", "version": "${version}", "image": "${repo_path}", "icon": "${icon_image}"}')}
# ${form_data}= Evaluate {'mldata': "'"+${data}+"'"}
# ${form_data}= Evaluate {'mldata': str(${data})}
# ${form_data}= Evaluate {'mldata': (None,str(${data}))}
# ${form_data}= Evaluate {'mldata': (None,${data})}
${header}= Create Dictionary Authorization=${token}
${response}= Post Request session /v1/ml files=${form_data} headers=${header}
Should Be Equal As Strings ${response.status_code} 200
我不确定这是否是传递多表单数据的正确方式,但它在我的情况下起到了作用。如果有人有更好的可行想法,请评论。这将有助于我将此代码细化为更好的形状。
根据@PDHide评论更新了答案。
Onboard ML From External Repo
[Arguments] ${token}=default
Create Session mxesession ${host}
${data}= Create Dictionary id=${id} author=${author} title=${title} description=${description} version=${version} image=${repo_path} "icon": ${icon_image}
${form_data}= Evaluate {'mldata=': str(${data}).replace("'",'"')}
${header}= Create Dictionary Authorization=${token}
${response}= Post Request session /v1/ml files=${form_data} headers=${header}
Should Be Equal As Strings ${response.status_code} 200
附言:感谢@PDHide的支持。
它应该作为字符串发送,而且不需要相等的
${form_data}= Evaluate {'mldata=': str(${data}).replace("'",'"')}
正如你所观察到的,我们必须通过
files=${form_data}
这就是我的工作结束。对于其他有这个问题的人
${data}= Evaluate {'username': (None, 'myusername'), 'password': (None, 'mypwd')}
${response}= Post Request ${Session_id} ${AUTH_TOKEN_URL_PATH} files=${data}