pb调用http的简单方法

pb调用http,一直以来是个麻烦的问题,于是用c++写了一个调用http的dll,

可以方便的进行http调用。

申明函数

 

/*
* 创建Http对象
*/
Function ulong SATHTTP_Create() library "satrda.dll"

/*
 *	释放Http对象
 * @http  http对象指针
 */
Subroutine SATHTTP_Destroy(ulong http) library "satrda.dll"

/*
 *	设置Header键值  
 *    如SATHTTP_SetHeader("Accept-Encoding","gzip")表示使用gzip压缩 
 * @http  http对象指针
 * @key	 header 键
 * @value header 值
 */
Subroutine SATHTTP_SetHeader(ulong http, string key, string value) library "satrda.dll"

/*
 *	清除Header
 * @http  http对象指针
 */
Subroutine SATHTTP_ClearHeader(ulong http) library "satrda.dll" 

/*
 *	是否使用gzip压缩,设置true时,相当于SATHTTP_SetHeader("Accept-Encoding","gzip")
 * @http  http对象指针
 * @value true-是  false-否
 */
 Subroutine SATHTTP_UseGZIP(ulong http, boolean value) library "satrda.dll"

/*
 *	得到Post或Get返回的数据
 *
 * @return Buffer
 */
Function long SATHTTP_GetBuffer(ulong http) library "satrda.dll"

/*
 *	发起Get请求
 * @http   http对象指针
 * @url    url地址
 */
Function long SATHTTP_Get(ulong http, string url) library "satrda.dll"

/*
 *	发起Post请求
 * @http   http对象指针
 * @url    url地址
 * @data   数据内容
 * @length 数据长度
 */
Function long SATHTTP_Post(ulong http, string url, ulong data, ulong length) library "satrda.dll"

/*
*	添加表单内容
*  @http   http对象指针
*  @name	   名称
*  @content   内容
*/
Subroutine SATHTTP_AddFormData(ulong http,string name, string content ) library "satrda.dll"

/*
 *	添加表单文件
 *  @http   http对象指针
 *  @filepath  需要上传的文件路径
 *  @filename  远程的文件名称,可以带路径 如 path/f.txt
 */
Subroutine SATHTTP_AddFormFile(ulong http,string filepath, string filename ) library "satrda.dll"

/*
 *	提交表单
 * @http   http对象指针
 * @url    url地址
 */
Function long SATHTTP_PostForm(ulong http, string url) library "satrda.dll"

/*
 *	提交表单
 * @http   http对象指针
 * @url    url地址
 * @filepath  文件保存地址
 */
Function long SATHTTP_GetFile(ulong http, string url, string filepath) library "satrda.dll"

 

 

上传文件

 

long ll_rtn,ll_http
String ls_path
blob lb_filename,lb_key
blob{1} lb_null
String ls_filekey,ls_md5


ls_path = "d:/111.txt"
lb_filename = n_api.of_toutf8("file/中文名.jpg")
ll_http = n_api.SATHTTP_Create()

lb_filename = lb_filename + lb_null
n_api.SATHTTP_AddFormFile( ll_http,ls_path, lb_filename)
ll_rtn = n_api.SATHTTP_PostForm(ll_http,"http://127.0.0.1:5555/upload/file.go")
n_api.SATHTTP_Destroy(ll_http)

if ll_rtn = 200 then
	messagebox("","成功!")
else
	messagebox("",ll_rtn)
end if

 

 

 

 

下载文件

 

 

long ll_rtn,ll_http
String ls_rfile,ls_filename
blob lb_b

lb_b = n_api.of_toutf8( "中文名.jpg")
ls_filename = n_api.SATHTTP_UrlEncode( lb_b, len(lb_b))
ls_rfile = "http://127.0.0.1:5555/file/" + ls_filename

ll_http = n_api.SATHTTP_Create()
ll_rtn = n_api.SATHTTP_GetFile(ll_http,ls_rfile,"d:/11.jpg")
n_api.SATHTTP_Destroy(ll_http)

if ll_rtn = 200 then
	messagebox("","成功!")
else
	messagebox("",ll_rtn)
end if

 

 

 

Http Post得到Json

long ll_rtn,ll_http,ll_len
ulong ll_data,ll_buffer
String ls_json,ls_null,ls_key
long ll_start
blob lb_data

ls_key = "SATRDAGREATWORKS"
ls_null = ""

ls_json = '{ "db":"mycon5","function":"sp_fun_test", "in1":10.1,"in2":"就是这么简单" }'

//pb10以上请参考of_toUTF8的注释修改
lb_data = n_api.of_toUTF8(ls_json)

ll_start = cpu()

ll_data = n_api.BlobToPtr(lb_data)
ll_http = n_api.SATHTTP_Create()
n_api.SATHTTP_UseGZIP( ll_http, true)
ll_rtn = n_api.SATHTTP_Post(ll_http,"http://127.0.0.1:5555/restful/rpc",ll_data, len(lb_data))



if ll_rtn <> 200 then
	messagebox("","失败," + string(ll_rtn))
else
	//得到Post返回数据
	ll_buffer = n_api.SATHTTP_GetBuffer(ll_http)
	
	//String以0结尾,插入1个0
	n_api.Buffer_Append(ll_buffer,n_api.StringToPtr(ls_null),1)
	ll_data = n_api.Buffer_Data(ll_buffer)
	
	ll_len =  n_api.Buffer_Size(ll_buffer)
	
	messagebox("数据长:" + string(ll_len),"时间:" + string(cpu() - ll_start))
	
	ls_json = n_api.of_utf8tostring(ll_data)
	Messagebox("",ls_json)
end if



n_api.SATHTTP_Destroy(ll_http)


最新版本可以通过QQ群:345559891 下载

 

服务端(jsxserver),采用c++ + iocp + pbni + zlib编写而成,支持PB长连结(提供pb客户端demo),支持http get post调用pbni调用pbcall里的nvo_pbnicall(服务端业务代码全由PB编写),具体请看demo客户端代码中的说明; 实现的功能:1.pb客户端调用功能,可实现类似easerver iiop的功能,比easerver多了服务端心跳,客户端自动判断是否断网,自动重连,客户端单开线程序通迅,前端界面不会卡死(用eserver不管是iiop还是ws高锋期经常未响应卡半天),传输码流比easerver小,程序总体运行效率也高一些,支持http get post调用,做接口很容易实现;2.客房端点对点发消息(由服务端转发),可以实现类似在线聊天的功能,响应http post也可以通过服务端即时转发给PB的客户端,PB客户端生成响应数据返回http调用端,客户如果用的局域网系统,又想做移动端的远程查询(小数据量),软件供应商有公网服务器的话,可用本框架打通实现,我们用此框架实现过医生手机远程连入门诊内部查询修改自已的预约、患者资料;3.服务端即时通知功能,pb长连结客户端、http调用,服务端处理完成后,可以给在线的pb长连结客户端发通知消息,客户端收到通知后可即时做出相应操作,例如:酒店系统,前台开房后,全系统房态即时刷新,门诊系统患者前台挂号后,医生端即时就看的到,等等,比客户端轮询来的效果好。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值