当帖子“内容类型”为application / x-www-form-urlencoded且*表单字段为param = {<this is =“” a =“” json =“” object =“”>}时,我的请求失败

时间:2019-05-15 08:24:21

标签: karate

当我发布请求的标头内容类型为'application / x-www-form-urlencoded;的API时,请求失败。 charset = UTF-8',而后文为'param = {这是一个json对象}'

像这样的curl请求,它可以工作。

curl'http://localhost:7272/Acme/iEhr/PersonSample'-H'Cookie:ACMETMP = fe35925f-a243-4be9-8e73-60c461ef9bd3; JSESSIONID = 47A43F4988F232CC7B53F6CF30B954F6; SESSION = e580c2c7-bf4b-45e6-93fc-de6f79854346'-H'来源:http://localhost:7272'-H'接受编码:gzip,deflate'-H'接受语言:zh-CN,zh; q = 0.9 '-H'用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_14_3)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 74.0.3729.131 Safari / 537.36'-H'内容类型:application / x-www -form-urlencoded; charset = UTF-8'-H'接受:application / json,text / javascript, / ; q = 0.01'-H'引用者:http://localhost:7272/route/sampleadd'-H'X-Requested-With:XMLHttpRequest'-H'连接:keep-alive'--data'param =%7B%22cityid%22%3A% 222091afc3-bcd6-46d9-8033-3548ad10933b%22%2C%22areaid%22%3A%222d09f5e5-a07d-445c-9d8a-51eb436699a8%22%2C%22hosid%22%3A%220f226b63-58ad-44d7-bf23-25d0345276 22%2C%22deptid%22%3A%2291c176f5-63ca-4b95-87c4-9f311864ff9b%22%2C%22barcode%22%3A%221000000000%22%2C ......'-压缩

它也适用于邮递员的请求,但因空手道而失败

Scenario: 样本登记

    Given path 'iEhr/PersonSample'
    And header Content-type = 'application/x-www-form-urlencoded; charset=UTF-8'

    * cookies { JSESSIONID: '#(jsessionID)',SESSION: '#(sessionID)', ACMETMP: '#(acmetmpID)'}

    And form fields param = {"cityid":"2091afc3-bcd6-46d9-8033-3548ad10933b","areaid":"2d09f5e5-a07d-445c-9d8a-51eb436699a8","hosid":"0f226b63-58ad-44d7-bf23-25d0345276e1","deptid":"91c176f5-63ca-4b95-87c4-9f311864ff9b","barcode":"1000000000","mothername":"manual-mother1","pregweek":"21", and so on}

    When method post
    Then status 200
    * print response

'和表单字段param = {这是一个json对象}'

这句话应该有用,但对我们来说却失败了。

空手道失败意味着什么? 响应代码与空手道相比有所不同,并且与邮递员一起工作时可以得到预期的结果。

邮递员

the necessary param data

空手道

18:14:09.437 request:
1 > POST http://localhost:7272/Acme/iEhr/PersonSample
1 > Accept-Encoding: gzip,deflate
1 > Connection: Keep-Alive
1 > Content-Length: 899
1 > Content-Type: application/x-www-form-urlencoded; charset=UTF-8
1 > Cookie: ACMETMP=d22c0d9a-b98b-4f6f-9e42-2f9bdffa22c8; JSESSIONID=09268B9F4CA0C15AE3FFB1A26BE424ED; SESSION=2baafdac-38d6-43d0-ac5c-d39e2b29fa48
1 > Host: localhost:7272
1 > User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_211)
cityid=2091afc3-bcd6-46d9-8033-3548ad10933b&areaid=2d09f5e5-a07d-445c-9d8a-51eb436699a8&hosid=0f226b63-58ad-44d7-bf23-25d0345276e1&deptid=91c176f5-63ca-4b95-87c4-9f311864ff9b&barcode=1000000000&mothername=manual-mother1&pregweek=21&pregday=1&midentitycard=&birthday=2018-10-01+00%3A00&collectdate=2019-05-15+14%3A38&personsex=1&personweight=4000&address=manual-testaddress1&mobile=15397006044&collectperson=&samplequality=1&borntype=1&linkman=&fidentitycard=&labitem=PHE&sampletype=1&btn=&isfee=0&personremark=&telephone=&bednumber=&labstring=&collectnumber=&freecode=&dhosid=0f226b63-58ad-44d7-bf23-25d0345276e1&reviewtype=&diagnosticstatus=&centerid=bb717701-10de-47ee-b49e-693261c6df22&nowdeptid=07eeec75-079b-4fa9-93cf-c45ddc9a87b9&operator=%E9%BB%84%E5%86%88%E5%B8%82%E5%A6%87%E5%B9%BC%E4%BF%9D%E5%81%A5%E9%99%A2&labitems=PHE&pagecode=sampleadd&modifydetail=%E6%A0%B7%E6%9C%AC%E5%BD%95%E5%85%A5

18:14:09.557 response time in milliseconds: 120.12
1 < 200
1 < Accept-Charset: big5, big5-hkscs, cesu-8, euc-jp, euc-kr, gb18030, gb2312, gbk, ibm-thai ...... and so on
1 < Content-Length: 52
1 < Content-Type: text/plain;charset=UTF-8
1 < Date: Wed, 15 May 2019 10:14:09 GMT
1 < X-Application-Context: Acme.jc.test:dev:7272
[{"code":-90018,"result":"(错误-90018)失败!"}]

2 个答案:

答案 0 :(得分:1)

您可以尝试一下吗

Scenario: 样本登记 
 Given path 'iEhr/PersonSample' 
 * cookies { JSESSIONID: '#(jsessionID)',SESSION: '#(sessionID)', ACMETMP: '#(acmetmpID)'} 
 And def ffParams = {"param" : {"cityid":"2091afc3-bcd6-46d9-8033-3548ad10933b","areaid":"2d09f5e5-a07d-445c-9d8a-51eb436699a8","hosid":"0f226b63-58ad-44d7-bf23-25d0345276e1","deptid":"91c176f5-63ca-4b95-87c4-9f311864ff9b","barcode":"1000000000","mothername":"manual-mother1","pregweek":"21"}} 
 And form fields ffParams
 When method post 
 Then status 200 
 * print response

默认情况下,表单字段仅使用url编码,无需在标头中明确提及

答案 1 :(得分:1)

And form field param = {"cityid":"2091afc3-bcd6-46d9-8033-3548ad10933b","areaid":"2d09f5e5-a07d-445c-9d8a-51eb436699a8","hosid":"0f226b63-58ad-44d7-bf23-25d0345276e1","deptid":"91c176f5-63ca-4b95-87c4-9f311864ff9b","barcode":"1000000000","mothername":"manual-mother1","pregweek":"21","pregday":"1","midentitycard":"","birthday":"2018-10-01 00:00" ...... and so on }

我改成了这个,现在可以了。 我被空手道中的关键字“ param”和我们的产品代码使用的关键字“ param”所迷惑。