場景:群裡有個小夥伴在使用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獲取檔案。