【PB续命05】WinHttp.WinHttpRequest的介绍与使用

这篇具有很好参考价值的文章主要介绍了【PB续命05】WinHttp.WinHttpRequest的介绍与使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 WinHttp.WinHttpRequest简介

winhttp.winhttprequest是Windows操作系统中的一个API函数,用于创建和发送HTTP请求。它可以用于从Web服务器获取数据,或将数据发送到Web服务器。该函数提供了许多选项,例如设置请求头、设置代理服务器、设置超时时间等。它是一个非常强大的工具,可以帮助开发人员轻松地与Web服务器进行通信。
winhttp.winhttprequest.5.1
wihttp.winhttprequest.5.1是一个Microsoft Windows操作系统中的COM组件,用于在应用程序中进行HTTP请求和响应。它提供了一种简单的方法来与Web服务器进行通信,可以用于发送和接收HTTP请求和响应,支持各种HTTP方法,如GET、POST、PUT、DELETE等。它还提供了一些其他功能,如设置请求头、设置代理服务器、设置超时等。

1 创建PB窗口

为了演示winhttp.winhttprequest的使用创建一PB测试窗口w_restful如下:
pb winhttp 获取 header,Oracle APEX,Powerbuilder,Oracle,restful,oracle Apex,PB PowerBuilder
窗口w_restful代码如下:

forward
global type w_restful from window
end type
type mle_resp from multilineedit within w_restful
end type
type st_3 from statictext within w_restful
end type
type cb_delete from commandbutton within w_restful
end type
type cb_put from commandbutton within w_restful
end type
type cb_post from commandbutton within w_restful
end type
type cb_get from commandbutton within w_restful
end type
type sle_data from singlelineedit within w_restful
end type
type sle_url from singlelineedit within w_restful
end type
type st_2 from statictext within w_restful
end type
type st_1 from statictext within w_restful
end type
end forward

global type w_restful from window
integer width = 3186
integer height = 1980
boolean titlebar = true
string title = "PB请求RESTful的数据"
boolean controlmenu = true
boolean minbox = true
boolean maxbox = true
boolean resizable = true
long backcolor = 67108864
string icon = "AppIcon!"
boolean center = true
mle_resp mle_resp
st_3 st_3
cb_delete cb_delete
cb_put cb_put
cb_post cb_post
cb_get cb_get
sle_data sle_data
sle_url sle_url
st_2 st_2
st_1 st_1
end type
global w_restful w_restful

forward prototypes
public subroutine wf_https (string as_method)
end prototypes

public subroutine wf_https (string as_method);string ls_url,ls_data
ls_url = sle_url.text
ls_data = sle_data.text

string ls_ret 

ls_ret = gf_https_apex(ls_url,ls_data,as_method)

mle_resp.text = ls_ret
end subroutine

on w_restful.create
this.mle_resp=create mle_resp
this.st_3=create st_3
this.cb_delete=create cb_delete
this.cb_put=create cb_put
this.cb_post=create cb_post
this.cb_get=create cb_get
this.sle_data=create sle_data
this.sle_url=create sle_url
this.st_2=create st_2
this.st_1=create st_1
this.Control[]={this.mle_resp,&
this.st_3,&
this.cb_delete,&
this.cb_put,&
this.cb_post,&
this.cb_get,&
this.sle_data,&
this.sle_url,&
this.st_2,&
this.st_1}
end on

on w_restful.destroy
destroy(this.mle_resp)
destroy(this.st_3)
destroy(this.cb_delete)
destroy(this.cb_put)
destroy(this.cb_post)
destroy(this.cb_get)
destroy(this.sle_data)
destroy(this.sle_url)
destroy(this.st_2)
destroy(this.st_1)
end on

event resize;//窗口控件自动适用

long llw , llh
llw = this.workspacewidth( ) - sle_url.x 

llh = this.workspaceheight( ) - mle_resp.y

sle_url.width = llw

sle_data.width = llw

mle_resp.width = llw
mle_resp.height = llh
end event

type mle_resp from multilineedit within w_restful
integer x = 411
integer y = 248
integer width = 2158
integer height = 812
integer taborder = 40
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Tahoma"
long textcolor = 33554432
string text = "responseText"
borderstyle borderstyle = stylelowered!
end type

type st_3 from statictext within w_restful
integer x = 78
integer y = 256
integer width = 302
integer height = 76
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Tahoma"
long textcolor = 33554432
long backcolor = 67108864
string text = "Response:"
alignment alignment = Right!
boolean focusrectangle = false
end type

type cb_delete from commandbutton within w_restful
integer x = 14
integer y = 784
integer width = 375
integer height = 116
integer taborder = 60
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Tahoma"
string text = "DELETE"
end type

event clicked;//DELETE
wf_https("DELETE")
end event

type cb_put from commandbutton within w_restful
integer x = 14
integer y = 648
integer width = 375
integer height = 116
integer taborder = 50
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Tahoma"
string text = "PUT"
end type

event clicked;//PUT
wf_https("PUT")
end event

type cb_post from commandbutton within w_restful
integer x = 14
integer y = 512
integer width = 375
integer height = 116
integer taborder = 40
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Tahoma"
string text = "POST"
end type

event clicked;//POST
wf_https("POST")
end event

type cb_get from commandbutton within w_restful
integer x = 14
integer y = 376
integer width = 375
integer height = 116
integer taborder = 30
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Tahoma"
string text = "GET"
end type

event clicked;//GET
wf_https("GET")
end event

type sle_data from singlelineedit within w_restful
integer x = 411
integer y = 128
integer width = 2167
integer height = 100
integer taborder = 20
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Tahoma"
long textcolor = 33554432
string text = "{}"
borderstyle borderstyle = stylelowered!
end type

type sle_url from singlelineedit within w_restful
integer x = 411
integer y = 4
integer width = 2167
integer height = 100
integer taborder = 10
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Tahoma"
long textcolor = 33554432
string text = "https://apex.oracle.com/pls/apex/blma/b5217/"
borderstyle borderstyle = stylelowered!
end type

type st_2 from statictext within w_restful
integer x = 137
integer y = 136
integer width = 242
integer height = 76
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Tahoma"
long textcolor = 33554432
long backcolor = 67108864
string text = "DATA:"
alignment alignment = Right!
boolean focusrectangle = false
end type

type st_1 from statictext within w_restful
integer x = 137
integer y = 28
integer width = 242
integer height = 76
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Tahoma"
long textcolor = 33554432
long backcolor = 67108864
string text = "URL:"
alignment alignment = Right!
boolean focusrectangle = false
end type

2 创建全局函数gf_https_apex()

用来发送请求和获得响应

global type gf_https_apex from function_object
end type

forward prototypes
global function string gf_https_apex (string as_url, string as_data, string as_method)
end prototypes

global function string gf_https_apex (string as_url, string as_data, string as_method);// 用WinHttp.WinHttpRequest.5.1组件,请求https网页和响应

/* 调用参数示例 
String ls_url,ls_data,ls_response
ls_url = 'https://datacenter-web.eastmoney.com/api/data/v1/get?'
ls_data = "callback=jQuery11230903969942572268_1651624511350&sortColumns=UPDATE_DATE,SECURITY_CODE&sortTypes=-1,-1&pageSize=50&pageNumber=1&reportName=RPT_LICO_FN_CPD&columns=ALL&filter=(REPORTDATE='2023-09-30')"
ls_response = gf_https_apex(ls_url,ls_data,ls_method)
*/

String ls_url,ls_data,ls_response

//请求的URL和数据
ls_url = as_url 
ls_data = as_data

OleObject lole_https   //声明ole
lole_https = CREATE oleobject 

long llr
any la
llr = lole_https.ConnectToNewObject("WinHttp.WinHttpRequest.5.1") 
lole_https.setTimeouts (50000,50000,50000,10000)
la = lole_https.open (as_method,ls_url, false)    //OPEN 

if not upper(as_method) = "DELETE" then 
	lole_https.setRequestHeader ("Content-Type", "application/json")
	lole_https.setRequestHeader ('Content-Length',string(len(ls_data)))
end if

lole_https.setRequestHeader ("charset","UTF-8")
lole_https.setRequestHeader ("User-Agent","Mozilla/5.0") //这个是Apex的RESTful需要的

lole_https.Send(ls_data) 
/*
关键是这一步:如果你的https的环境没有安装浏览器的认证的根证书,一定会报错退出,
如果你申请安装了verisign等权威机构发的根证书,用ie打开上面的https,就不会报红色警告(问你是不是继续)。
但pb不会提示你是不是继续,直接报错退出。verisign的证书一年好像要1万-10万元的服务费。在这里你如果想测试一下,
你可以把上面的https地址换成https://www.alipay.com/  (支付宝的),不会报错的。注意:这里的证书及验证都是单向验证,不是双向的。
*/

IF lole_https.Status >= 300 THEN 
	ls_response = string(lole_https.Status) + " : " + string(lole_https.StatusText)
	MessageBox ("HTTPs request failed:",ls_response ) 
	return ls_response
END IF 

blob lb_body
lb_body = lole_https.responseBody

ls_response = string(lb_body,EncodingUTF8!) //返回结果

//销毁 ole
destroy lole_https

return ls_response

end function

3 运行效果

窗口上的调用https请求的函数代码:

string ls_url,ls_data
ls_url = sle_url.text
ls_data = sle_data.text

string ls_ret 

ls_ret = gf_https_apex(ls_url,ls_data,as_method)

mle_resp.text = ls_ret

3.1 GET请求数据

【GET】按钮上的代码:

//GET
wf_https("GET")

pb winhttp 获取 header,Oracle APEX,Powerbuilder,Oracle,restful,oracle Apex,PB PowerBuilder
数据库表上的数据:
pb winhttp 获取 header,Oracle APEX,Powerbuilder,Oracle,restful,oracle Apex,PB PowerBuilder

3.2 POST添加数据

【POST】按钮上的代码:

//POST
wf_https("POST")

pb winhttp 获取 header,Oracle APEX,Powerbuilder,Oracle,restful,oracle Apex,PB PowerBuilder
pb winhttp 获取 header,Oracle APEX,Powerbuilder,Oracle,restful,oracle Apex,PB PowerBuilder

3.3 PUT修改数据

【PUT】按钮上的代码:

//PUT
wf_https("PUT")

pb winhttp 获取 header,Oracle APEX,Powerbuilder,Oracle,restful,oracle Apex,PB PowerBuilder

pb winhttp 获取 header,Oracle APEX,Powerbuilder,Oracle,restful,oracle Apex,PB PowerBuilder

3.4 DELETE删除数据

【DELETE】按钮上的代码:

//DELETE
wf_https("DELETE")

pb winhttp 获取 header,Oracle APEX,Powerbuilder,Oracle,restful,oracle Apex,PB PowerBuilder
pb winhttp 获取 header,Oracle APEX,Powerbuilder,Oracle,restful,oracle Apex,PB PowerBuilder文章来源地址https://www.toymoban.com/news/detail-782679.html

4 Apex的AutoREST的其它服务

  • GET一条记录
  • GET分页设置
  • 查询条件GET数据
  • 按查询条件DELETE数据
  • 批量从本地文件加载数据
  • 等等,不再举例演示了

到了这里,关于【PB续命05】WinHttp.WinHttpRequest的介绍与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • wininet,winhttp,xmlhttprequest,各版本区别 《转》

    实现Http访问,微软提供了二套API:WinINet, WinHTTP(分别封装于system32目录下的wininet.dll和winhttp.dll内) 二者主要区别在于后者更为安全和稳定,可以说WinHTTP是WinINet的升级版 LZ所提的UDF WinHTTP.au3就是直接调用标准接口写成的自定义函数库文件 二、COM对象XMLHttpRequest和WinHttpReques

    2024年02月09日
    浏览(36)
  • STM32 使用调试引脚 PB3,PB4 P15 方法

    1.PB3/PB4/PA13/PA14/PA15引脚默认功能参照    PB3-----------------JTDO    PB4-----------------JNTRST    PA13-----------------JTMS    PA14-----------------JTCK    PB15-----------------JTDI 2.这是STM32官方库的宏定义 /// 可使用PB4 #define GPIO_Remap_SWJ_NoJTRST      ((uint32_t)0x00300100)  /*SWD使能、JTAG使能但是不包括

    2024年01月20日
    浏览(41)
  • PB从入坑到放弃(五)窗口使用技巧

    PB 应用程序就是由许多共同协作完成特定任务的窗口组成的集合。 窗口在应用程序的开发工作中占有很大的比重,是非常重要的一个 PB 对象 窗口类型 描述 Main ①可以覆盖其他窗口,也可以被其他窗口覆盖 ②可以最大、最小化,可以用鼠标改变其 大小 ③可以有边框,可以有

    2024年02月16日
    浏览(37)
  • STM32引脚PA15,PB3,PB4用做普通I/O口高低电平默认无法拉高拉低

    STM32,这个MPU上电默认PB4 PB3 PA15这些引脚电平且无法正常拉高拉低。 PB4,PA15为高电平,PB3为低电平。 其实原因是:I/O口不能正常输出一般都是端口被复用了造成的。 文章讲的这几个端口在单片机上电时默认就是复用的,JTAG相关的PA13,PA14,PA15,PB3,PB4引脚,禁用JTAG或SWD可以释放其

    2024年02月03日
    浏览(73)
  • Pb从入坑到放弃(三)数据窗口

    数据窗口是 Pb 的一个特色控件,有了数据窗口对于 pb 来说可谓如虎添翼。 对数据库中的数据操作,几乎都可以在数据窗口中完成。 使用数据窗口可以简单检索数据、以图形化的方式显示数据、绘制功能强大的数据统计报表。 数据窗口画板由Design, Preview, Control List, Dat

    2024年02月13日
    浏览(50)
  • PB从入坑到放弃(四)常用函数

    这一期呢,来整理下 PB 常用的函数,包括系统的和一些自己封装好的函数 1.1 Len函数 获取字符串长度 ① 语法 ②参数 string --string 类型变量 ③ 返回值 返回值: Long 函数执行成功时返回字符串长度,发生错误返回-1 函数执行成功时返回字符串长度,发生错误返回-1 1.2 Mid 函数

    2024年02月16日
    浏览(70)
  • PB从入坑到放弃(二)编码规范

    上一篇我们从0到1用 pb 开发了一个 helloworld 程序,并成功将开发的程序编译打包并且制作了安装包。 程序员最讨厌的莫过于写文档和别人不写注释。 不知道大家会不会和我一样,在找bug时,有段代码,心中不知默默的骂了它多少遍。 哪个sx写的这代码,研究了一段时间发现

    2024年02月13日
    浏览(47)
  • pb如何在数据库保存和读取图片

    字段类型Image(不同数据库不同,如果没有再查找blob等类型),然后使用如下编程套路: 读取:    这样的字段不能放在数据窗口的Detail节中,通常用户点击某行数据,获取该行的主键信息,以该信息为条件检索图片信息。比如,主键为id,图片保存在zp字段中:    在dw_1的

    2024年02月09日
    浏览(43)
  • PB级区块链开源存储引擎“泓”Huge

    区块链的特有属性使数据可追溯、不可篡改的同时弊端也很明显,采用的分布式存储技术需要每一个节点保存一份数据库,存储成本高;网络中发生的每笔交易都需要其它节点认证和记录,处理速度慢;这让区块链的系统的存储效率相较集中式存储受到诟病。作为数字经济新

    2024年01月17日
    浏览(36)
  • pb:获取服务器时间、判断是否有重复数据

    /*----------------------------------------------------------------------- * 函数名称:datetime gf_getsysdate(string as_dbms) * 功能描述:取得服务器的的日期时间(DateTime)                       * 参数含义:as_dbms 所使用的数据库DBMS   * 返 回 值:datetime类型,系统日期 * 调用举例:ldt_today

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包