httpfile()

阅读(1990) 标签: url, 返回结果, 封装成文件流,

描述:

url的返回结果封装成文件流

语法:

httpfile(url:cs,post:cs;header)

备注:

HTTP服务中url串的返回结果封装成文件流,只读且不能分段读取。

参数:

url

HTTP服务的url串格式

portHTTP服务中配置的端口号。dfx路径相对于【工具】-【选项】-【环境】中配置的主目录

HTTP服务的url串格式,分两种情况:

一、集算器风格

使用集算器的http服务时,url的写法如下:

http://IP:port /dfx1.dfx()

http://IP:port /dfx1.dfx(arg1,arg2,...)

http://IP:port/dfx1.dfx(...)dfx2.dfx

http://[IP6]:port /dfx1.dfx()

1、只有一个dfx文件。如果dfx有参数,则在括号里依次写参数值,参数值间用逗号分隔;如果没有参数,则参数为空。此时dfx里的返回值已经是用户所需要的格式。

2、有两个dfx。这种情况用于用户想要的返回值格式与dfx1的返回值格式不同,从而使用dfx2dfx1的返回值改为自己需要的格式。dfx1的写法与第1种情况中的dfx相同,但是此处的dfx1仅支持单结果集。dfx2为单参数的程序,参数值为dfx1的返回值。

dfx2中可以将dfx1的返回值转换成自己需要的格式,然后作为dfx2的返回值。例如:dfx1中缺省返回的序表字段间是以"|"分隔,如果想以空格分隔,则可以使用dfx2dfx1的结果进行处理,使得序表字段间以空格分隔。

如果有返回第二个结果集(必须是串),则认为是header

3IP协议为IP6时,需要对IP地址添加中括号“[]”。

二、SAPresult风格

dfx文件保存在主目录的子目录时,可以使用SAPresult风格调用方式。

首先,在httpServer.xmlsapPath属性中配置dfx相对与主目录的路径,可以是多层目录结构,也可以是空串,空串则表示位于主目录下,多个路径间用逗号隔开,比如:

<?xml version="1.0" encoding="UTF-8"?>

<Server Version="1" host="127.0.0.1" port="8503" parallelNum="10" sapPath="/sf,,/sr/pm"/>

上面xml中,sapPath配置了三个相对路径,分别表示[主目录]/sf[主目录][主目录]/sr/pm

按照SAP规则,url的写法如下:

http://IP:port /sapPath/dfxName  调用无参数的dfx

http://IP:port /sapPath/dfxName/arg1[value1]/arg2[value2],... 调用带参数的dfx

sapPath 表示httpServer.xmlsapPath属性中设置过的路径;

dfxName 表示dfx名称,调用时不带扩展名;

arg1[value1]/arg2[value2],... 表示dfx中的参数名称及参数值,要求参数名称必须为纯字母组成的字符串,参数值必须为首字符为数字的字符串,调用时参数名称与参数值拼接成一个字符串使用,多个参数之间用“/”隔开。

注:当dfx中用到数据库中的数据时,需要在raqsoftconfig.xml中对应的DB节点中,配置autoConnect的属性值为true,否则无法连接数据库

cs

字符集,支持的字符集是jvm自带的字符集。缺省则为虚拟机默认值。

post

POST方式上传的参数,形如p1=v1&p2=v2。可以省略。

header

header属性可以有多个形,如:headerName1:value1,headerName2:value2,...可以省略;格式为"property":"value",…;对返回文件对象执行.property()时,将解释为返回header的属性

返回值:

文件流

示例:

 

A

 

1

=httpfile("http://localhost:9090/p1.dfx()":"GBK").import@t()

p1.dfx内容如下:

加载http服务上的文件p1.dfx,字符集为GBK

2

=httpfile("http://localhost:9090/p2.dfx(3)":"GBK").import@t()

p2.dfx内容如下:StuId为参数

3p2.dfx的参数值

3

=httpfile("http://localhost:9090/p3.dfx(3Class%20two)":"GBK").import@t()

p3.dfx内容如下:StuIdClass为参数

多参数时以逗号分隔

4

=httpfile("http://localhost:9090/http2.dfx()").import@t()

http2.dfx内容如下:

返回结果:

5

=httpfile("http://127.0.0.1:9090/http2.dfx()http3.dfx").import@t()

http3.dfx内容如下:

返回结果:

http2.dfx缺省返回由STATE字段值组成的序列,但是期望的效果是以逗号作为分隔符并且以字符串的形式返回,所以使用http3.dfxhttp2.dfx的结果进一步处理。

6

=httpfile("http://192.168.0.131:6080/myweb/servlet/testServlet?table

=employee&type=json")

testServlet可以返回json格式的员工信息字符串

7

=httpfile("http://localhost:6080/myweb/servlet/testServlet":"GBK"

,"table=employee&type=json":"GBK")

 

8

=httpfile("http://127.0.0.1:8182/scada/v1/uaes/datapoint/history/rawvalue/rtdb/access","{\"nodeIds\":[\"ns=102;s=AI_002_0600.PV\"], \"startTime\":\"2018/6/28 13:10:00\", \"endTime\":\"2018/6/28 13:11:0\", \"returnBounds\":\"false\", \"maxSizePerNode\":\"10\"}"; "Content-Type":"application/json")

服务器端用json方式传参数, post参数写成一个json串的形式,并在函数中指定header属性Content-Type,与前面的参数用分号隔开

9

=httpfile("http://127.0.0.1:8503/sr/pm/gypb/id3/parent15").read()

gypb.dfx内容如下:

网格参数:

使用Sap风格,首先在[安装目录]/config/httpServer.xml中配置了sapPath="/sr/pm"选项,URL 中,/sr/pm表示dfx相对于主目录的位置,gypb表示调用的dfxgypb.dfxid3/parent15表示参数id的值为3,参数parent的值为15

10

=httpfile("http://192.168.74.1:8508/dc/arg22").read()

如果是在主目录下可以不用配置sapPath,且端口号后不用跟路径直接拼接/dfxName,该URL表示,dc.dfx保存在主目录下,参数名称为arg,参数值为22

11

=httpfile("http://[fe80::2918:abe0:3017:8401%15]:8503/emp.dfx()":"GBK").import@t()

加载IP6协议http服务上的文件emp.dfx,字符集为GBK