从带有robot框架请求库的REST POST请求返回的Get文件

2024-09-21 05:41:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在测试一个REST服务器;它的一个服务提供一个文件作为响应。我使用robotframework-requests库来调用服务。这是我的测试用例:

*** Settings ***
Library             RequestsLibrary


*** Test Cases ***
Test
    RequestsLibrary.CREATE SESSION      session     http://192.168.100.139:9090
    ${data} =       evaluate    json.load(open('/root/data.json', 'r'))   json
    log to console  Data: ${data}
    ${resp} =       RequestsLibrary.POST REQUEST    session  uri=/omc/simulator/api/generate   data=${data}
    log to console  Resp: ${resp}

我得到的回报是:

^{pr2}$

其中,415HTTP代码表示Unsupported Media Type。在

我怎样才能得到所提供的文件作为回报,我应该如何配置下载路径?在robotframework或{}中编码是否可行?在

编辑1:

我尝试过按@Todor的建议为请求头设置Content-Type

${headers} =    Create Dictionary    Content-Type=${contentType}
${resp} =       RequestsLibrary.POST REQUEST    session  uri=/omc/simulator/api/generate   data=${data}   headers=${headers}

我仍然得到application/octet-streamapplication/zip(文件的扩展名为.zip)的状态代码415。在

<2>编辑:

为了将文件保存到一个目录中,我更改了服务器,这样我就可以使用它;但是由于它不接受我的头,所以我仍然不能完全调用该服务。我得到415状态代码,它是从服务器发送的,这意味着我没有在我的header中设置正确的Content-type。在

顺便说一句,我把我的请求主体改成@Todor推荐的:

${data} =       evaluate    json.dumps(json.load(open('/root/data.json', 'r')))  json
${headers} =    Create Dictionary    Content-type=${contentType}
${headers} =    evaluate    json.dumps(${headers})
${resp} =       RequestsLibrary.POST REQUEST    session  uri=/omc/simulator/api/generate   data=${data}   headers=${headers}

但我对application/octet streamandapplication/zip(the file has.zipextension) as${contentType}`;仍然得到相同的错误。在

**编辑3:**

我一直在用错误的Content-type;我应该用application/json。考虑到@Todor关于headerdata的注释,我终于让它起作用了。在

${data} =       evaluate    json.dumps(json.load(open('/root/data.json', 'r')))  json
${headers} =    Create Dictionary    Content-type=application/json
${resp} =       RequestsLibrary.POST REQUEST    session  uri=/omc/simulator/api/generate   data=${data}   headers=${headers}

Tags: 文件jsondataapplicationrequestsessionuricontent
1条回答
网友
1楼 · 发布于 2024-09-21 05:41:56

使用此错误响应,您可能错过了一个必需的标题,如content-type;请检查应用程序的日志以确定。
添加方法如下:

# the previous code
${headers}=   Create Dictionary   Content-type=application/json
${resp} =       RequestsLibrary.POST REQUEST    session  uri=/omc/simulator/api/generate   data=${data}   headers=${headers}

代码还有另一个问题;这一行:

^{pr2}$

,将有效地加载所提供的json文件,并将其转换为python对象(很可能是字典)。
但是,您不应该像这样在请求中发送它-它必须被序列化回json格式(b/njson和python字典的字符串表示的最大区别是json不使用单引号'作为分隔符)。在

一旦你做到了,你可以:

${data} =       evaluate    json.dumps($data)   json

,这将使它变回原样。或者,只需加载文件内容,而不进行这种前后转换。在

相关问题 更多 >

    热门问题