python3調用基於hessian協議的接口(親測有效)

       Hessian是一個輕量級的RPC框架,它基於HTTP協議傳輸,使用Hessian二進制序列化,對於數據包比較大的情況比較友好。但是它的參數和返回值都需要實現Serializable接口。Hessian的最大優勢在於跨平臺,多語言支持和比較合理的性能,目前‍Hessian支持,如Java、Flash/Flex、Python、C++、.NET C#、D、Erlang、PHP、Rubby、Objective C。

       對於Hessian類型的接口如何進行調用呢?小編嘗試使用Postman、Httpie都無法調用,於是嘗試使用python進行調用,但這種類型的接口和標準Http協議的接口有所區別,使用requests發起請求也無法實現。查找一些資料,都說使用 hessianlib.py ,但版本好久未更新,也不支持python3,見下圖:       後來才發現原來python3支持hessian需要安裝 python-hessian 擴展包,源碼 https://github.com/bgilmore/mustaine,直接使用 pip install python-hessian 安裝。現在給以下的一個實例:

      

         這是 LmWorkerTaskServcie.java 接口類:

	/**
	 * 
	 * @param  
	 * @return
	 */

import java.util.List;

import apollo.erp.base.domain.LmWorkerTask;

/** 
 * 
 * @author zt
 * @version 1.0 
 * @date 2018-9-25 下午2:31:00 
 * 說明:
 *
 */

public interface LmWorkerTaskService {
	
	/**
	 * 
	 * @param barcode
	 * @param lmTaskJson
	 * @return
	 * @throws Exception
	 */
	public String insertLmWorkerTask(String barcode,String lmTaskJson) ;
}

         接下來便是利用python調用上面的接口了,問題就解決了。注意(多數博客就是調用方法不同, __call__可以查看底層源碼)

import json
from pyhessian.client import HessianProxy


def run():
    url = "http://192.168.133.129:20880/apollo-erp-remote/lmWorkerTaskService"
    params = {
        'barcode': 'A502170661032-5-1',
        'lmTaskJson': json.dumps({
                "barcode": "A502170661032-5-1",
                "unitcode": "YB",
                "userCode": "211573",
                "operateTime": "2018-09-28 11:12:39:667",
                "type": "in"
            })
        }
    service = HessianProxy(url)
    response = service.__call__(method='insertLmWorkerTask', args=(params['barcode'], params['lmTaskJson']))
    return response

if __name__ == '__main__':
    print(run())

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章