kettle從入門到精通 第七十二課 ETL之kettle 三談http post(含檔案上傳),徹底掌握引數傳遞

慕容尘轩發表於2024-06-21

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

相關文章