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 下载

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值