PB inet组件 Post给php时怎么接收

最近接触了pb的inet组件调用和提交java写的接口。对于单条数据可以说非常好,取和发送都很成功,没有什么问题。

但是如果要获取多达千条的记录甚至数万条,用json不合适。

改进:写出特殊的多种需求的接口,如果只需要返回较少栏位时,写专门的接口,减少不必要的栏位。第二:约定栏位名的简称,这样能缩小栏位名放入json中的占用长度。甚至我想用栏位的序号作为json编码中的栏位名即可。

因为表的栏位非常多,而且栏位名定义非常复杂(非常长),组合成json后非常不适合传输数据。多年经验所得,如果为了传输多行数据,还是按"|"分隔每个栏位,并约定栏位的顺序。这样最靠谱。只是厂家有时一推六二五。无果罢了。

另外pb效率低,对于返回非常多条记录的json记录的解析实在无能为力,虽然我用了栏位名预测方法试图更快跳过栏位名部分,但是实际效率非常低,如果真要用我想得用c来实现,才有天然的速度可言。我现在只用上传接口(一条),要取很多数据时我已经彻底否定了客户当初要求只使用接口的做法,改用dump另外建立一个镜像服务器来读。

对于不以单条数据交互为目的的调用,厂家还是建议用mysql dump取数据或者开账号直接查询mysql(只是要求不要太频繁,注意时机,而且不读当天的分表)因为dump要锁表,时机不对影响正常业务,读当天分表非常影响讲究效率的详单计费数据的高并发写入。所以实际情况总是要权衡左右,时间点,频率,尽量少获取返回值都要考虑进去。

后面接触到要和php打交道,用post时,无法从$_POST数组接收到数据。原因是因为需要post时需要指定:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。inet我不知道是否能指定,反正后面是改用: $GLOBALS['HTTP_RAW_POST_DATA'] 来接收并自己切分参数(类似:parm1=aaa&parm2=bbb)。第一次遇到这个问题时,是我自己baidu了解到的,因为一般的php程序员都是很简单从$_POST去接收即可,根本没想到,又是打印日志,又是抓包,忙了好几天才解决。

之前调用java的json接口时不会出现问题,是因为对于text/html,soap,json格式都是使用$GLOBALS['HTTP_RAW_POST_DATA']来直接接收处理的。

另外还遇到一个奇葩问题,php给出的post之后的结果字符串,含有几千个空白不可见字符在前面,最后给出的才是返回结果,把人搞惨了。messagebox出来才发现。当然这是php做接口时引发的问题。可以直接用浏览器中看源码,一定要使得返回字符串就在第一行。前面不要出现任何空白行。

推荐查看我的软件作品:

1. PB反编译大师

2. PB混淆加密大师

3. 互联网数据组件:DataWindowHTTP

4. ESC/POS打印组件:ESC/POS ImagePrint

5. SQLConnectManager:数据库连接断线管理(年后即将测试)

PB反编译, PB反编译大师, PB加密, PB混淆加密大师,DatawindowHTTP,PB DeCompiler,PB Obfuscator正在上传…重新上传取消http://powerbuilder.ltd/indexcn.htmlicon-default.png?t=M0H8http://powerbuilder.ltd/indexcn.html


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用\[1\]: 目前PB开发中,可以将其作为一个远程客户端UI来使用,实际上它并不连接数据库,而是完全通过Coldfusion的服务页面来完成数据操作。因此,当需要传递大量数据,简单的inet.GetURL函数就不太适用了。为此,我特地研究了inet.PostURL的用法。它的用法在帮助文档中有两个示例。第一种是简单地调用一个页面,并获取页面返回的HTML内容。\[1\] 引用\[2\]: 但是上述方法在实际执行存在一个问题,即缓存。如果你已经执行过一次这种方式,它返回的内容将被缓存在PBVM内存中。当下次再执行,它不会重新发送请求,而是直接从内存缓存中取出并返回内容。解决这个问题的方法是在要传递的内容中不要放置空值,随便填写一个值。不过这样做有点多此一举,不如直接使用GetURL更直观一些。\[2\] 引用\[3\]: 但是如果要传递文件,最好使用HTML表单的HTTP multipart/form-data方式来处理。因此,在PB的帮助文档没有明确说明的情况下,就需要研究一下HTTP的相关协议了。在HTTP协议中,有一个专门用于传输multipart/form-data的方式,即rfc1867协议。这个协议的基本结构如下:\[3\] 根据以上引用内容,如果你想在PB中打开网页并使用POST方法传递参数,你可以使用inet.PostURL函数。你可以创建一个inet对象,然后使用PostURL方法来发送POST请求。你可以在函数的参数中指定要传递的URL、参数、头部信息等。如果只是简单地调用一个页面并获取返回的内容,可以参考第一个引用中的示例代码。如果需要传递文件,可以参考第三个引用中提到的使用multipart/form-data方式处理的方法。 #### 引用[.reference_title] - *1* *2* *3* [Pb使用POSTURL](https://blog.csdn.net/ribut9225/article/details/52640438)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值