PB如何提交WEB请求包含中文参数的解决方案全过程

上传人:碎****木 文档编号:220861690 上传时间:2021-12-09 格式:DOCX 页数:4 大小:21.79KB
返回 下载 相关 举报
PB如何提交WEB请求包含中文参数的解决方案全过程_第1页
第1页 / 共4页
PB如何提交WEB请求包含中文参数的解决方案全过程_第2页
第2页 / 共4页
PB如何提交WEB请求包含中文参数的解决方案全过程_第3页
第3页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《PB如何提交WEB请求包含中文参数的解决方案全过程》由会员分享,可在线阅读,更多相关《PB如何提交WEB请求包含中文参数的解决方案全过程(4页珍藏版)》请在金锄头文库上搜索。

1、我要做的事情:我要用POST 方式发送WEB 恳求到效劳器,同时传输一些中文参数过去。开发环境: WIN7 64 位下的PB10。效劳器全部都是UTF8 格式的。走的弯路:1. 我先试图用inet 的geturl/posturl 方式,具体方法是:新建一个标准类对象,选择 inet, 然后保存,命名成 n_inet,然后再新建一个标准类对象,选择 internetresult,保存,命名成n_ir。留意,必需要修改n_ir 的 internetdata(data) 函数,这个函数是处理web 恳求后效劳器返回回来的网页的,其中的参数data 就是blob 形式的网页。这两个对象建好以后,然后就

2、可以向 web 效劳器发送恳求了,由于 geturl 方式比较简洁, 所以我先用geturl 进展尝试。String ls_url,ls_text,ls_uid,ls_sendls_url = ” :/127.0.0.1:8081/smsSys/sms/sendSms?” ls_text = ”呵呵哒”ls_uid = ”1002”ls_send = ls_url + ”text=” + ls_text + ”&uid=” + ls_uidn_inet ln_inet n_ir ln_irln_inet = create n_inet ln_ir = create n_ir integer l

3、i_retli_ret = ln_inet.geturl(ls_send,ln_ir) if li_ret 1 thenmessagebox(”发生错误”,string(li_ret)elsemessagebox(”提示”,”发送成功”)end ifdestroy ln_inet destroy ln_ir运行这段代码,我觉察我的效劳器确实承受到了web 恳求,并且这里的 internetdata 确实承受到了效劳器返回的html,但是有一个问题:中文乱码!一开头我以为这是一个小问题,但结果,它让我付出了 3 天半的时间才最终解决。我先尝试把要发送的ls_send 转换成UTF-8 的格式:

4、string ls_send1blob lb_templb_temp = blob(ls_send,EncodingUTF8!) ls_send1 = string(lb_temp,EncodingUTF8!)我在 internetdata 函数里也使用了这个方式,确实是看到把 ls_send 的格式转换成了UTF-8 的,但是乱码问题照旧。也尝试过另外的转换UTF-8 的方法,比方使用下面的: ole_ADOStream.ConnectToNewObject(“ADODB.Stream“)这个来转换,具体代码也省略了,还是行不通。转换出来的文字不太对劲,也没有什么用。后来找了很多资料才知道,

5、为什么不行呢?由于 geturl 方式只能发送ASCII 码,所以这条路不通。【其实缘由到底是不是这样我也不是百分百确定,或许是由于别的缘由?】然后我试图用posturl 方式:postrul 方式麻烦一些,要构造header 什么的,具体代码网上也有,我就不贴了,header里面的内容也是很要紧的,假设格式不对,是会报错的。但是后来才觉察 posturl 只支持 CGI 的 WEB 效劳器,我的效劳器不支持CGI,我也不期望通过修改效劳器的方式来支持,太麻烦了吧?于是此路不通。2. 就这样折腾了一天多,从网上找啊找,PB 的 web 开发的资料真是少得可怜,后来找到了一些线索,要么我用PB

6、调用 javascript,然后在javascript 脚本中提交web 恳求,好似也是一条路:下面是具体的代码: oleobject io_script Io_script = create oleobject long ll_1ll_1 = io_script.connecttonewobject( “MSScriptControl.ScriptControl“) if ll_1-1ls_js=ls_js+ls_1+”rn” li_readline=FileRead ( li_file, ls_1 )loop fileclose(li_file)io_script.language=“JS

7、cript“ io_script.addcode(ls_js)any la_1 la_1=io_script.run(“SubmitArticle“,astru_msg.url,astru_msg.dh,astru_msg.msg,astru_msg.uniqueflag,astru_msg.uid,astru_msg.activetime,astru_msg.sign) destroy io_script到 addcode 那一段就各种报错,又折腾了一天多,才觉察是javascript 写的有问题,如果 addcode 进去的Javascript 有语法错误,PB 运行就会报错。这个搞定以后

8、,觉察 io_script.run()这个无论如何都不能正确地执行。 网上找的各种说法都试过,全部都不行,我真疑心他们到底是不是真的自己试过,很多都是复制粘贴别人的代码的,根本自己都没有测试过。怨念很深。算了,这条路也不通。3. 于是找啊找,找啊找,最终被我找到一条线索,那就是直接使用 MS WEB BROWSER控件。方法:翻开一个窗口,然后 Insert-control-Ole.-在跳出来的TAB 页上面切换到Insert control 栏目,找到MS web browser,点击确定,在窗口上选择适宜的位置放下。然后,在程序名目下建立一个 utf8.html,这里面是一个表单,然后我就

9、操控这个控件去翻开这个网页,然后在程序里面提交掉。虽然结果很简洁,但过程是很艰辛的,由于期间各种报错,一开头无论如何也打不开本地的 html,翻开的是 internet 有问题的界面,然后我只好在本地的效劳器上放上这个 html, 去远程猎取,后来不知道怎么的改回本地的Html 又行了。然后是更改控件的值,又是各种报错,最终是觉察是这样:ole_1.object.navigate(“file:/d:/website/utf8.html“) timer(1)Time(1)里面的代码: timer(0)int li_count li_count = 0li_count = ole_1.object

10、.Document.getElementsByName(“mob“).length if li_count = 1 thenole_1.object.Document.getElementById(“msg“).setattribute(“value“,istru_msg.msg) ole_1.object.Document.getElementById(“uid“).setattribute(“value“,istru_msg.uid) ole_1.object.Document.getElementById(“s1“).clickelsetimer(1)end if为什么要在这里建立一个t

11、imer,是由于,假设把timer 去掉,直接在navigate 后面加上ole_1.object.document.getelementbyid 的时候,可能会猎取不到!由于navigate 函数是不管网页有没有加载上,直接返回的,就是这里其实产生了两个线程,一个线程去加载网页,另外一个线程直接返回去执行后面的代码。【我调了一个上午,才偶然觉察这样的事,日】这样建一个 timer,就相当于等待网页加载完成,再去修改各种网页中控件的值,再去执行网页中的button 的 click 大事。留意,click 后面是不需要括号的。网上很多乱七八糟的代码真是很不负责任的,就是不知道从哪里拷贝粘贴过来,或者自己编造一段代码,也不管能不能行,就在那里装逼答复别人的问题。实际测试的结果是,效劳器最终承受到了我发送过去的中文字符,没有任何问题。然后呢,我就完善地做到了用PB 发送WEB 恳求,包含中文。GOOD

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号