场景:群里有个小伙伴在使用http post步骤调用接口时遇到问题,postman调用正常,但是kettle中调用异常。
解决方案:既然postman调用接口正常,肯定是http post步骤中某些参数设置的不正确导致的。那就把常用的方式都梳理下,搞定它。
1、http post请求参数放到body中,Content-Type是application/json。
1)body参数配置
2)http head中的Content-type配置为application/json。
3)接口方参数调试
2、http post请求参数放到form中,类似于html中的表单提交,Content-Type是application/x-www-form-urlencoded。
1)http head中的Content-type配置为application/x-www-form-urlencoded。
2)body(header) parameters设置。
3)接口方参数调试
3、http post请求参数放到url中,这种方式不常见一般是get请求参数放到url中,Content-Type不限。
1)只需要将参数放到url后面即可
2)接口方参数调试
3、http post 请求参数放到query parameters中,通过kettle源码查看得知这部分参数依然放到body中,而不是放到url后面。
1)源码一窥究竟
如果服务的是java服务,则可以通过request.getParameter("parameterName")这种方式获取url和form表单中的参数。
如果服务是python服务,则需要通过request.form来获取query parameters中的参数了。
2)query parameters参数设置,Content-Type是application/x-www-form-urlencoded
3)接口方参数调试,经过调试发现无论python或者是java接收参数,都会出现中文乱码,大神们可以评论区告诉我
4、http post请求参数为文件,相当于文件上传,Content-Type是multipart/form-data
1)参数设置,这里需要选中Post a file选项。
2)设置Content-type为multipart/form-data或者application/octet-stream。
3)接口方参数调试,经过调试发现python后端需要通过request.data 接收文件,通过request.files 接收不到。
4) 查看kettle 源码得知:Java 客户端发送文件时,使用的是直接将文件内容作为请求体的形式,而不是通过标准的文件上传方式,所以request.files 接收不到。
5)标准文件上传代码如下,这种方式可以通过request.files获取文件。