在web开发或者接口开发中,我们常常需要进行一些http请求的转发,也就是js中的跨域请求或域内请求,比如在http://www.offeu.com内去请求http://www.ykipa.com的接口,在js中我们是需要在被请求端设置一些参数,以允许跨域请求,在脚本模型中则不需要那么麻烦,直接调用内置函数HTTP就可以了,它是基于delphi xe8以后集成的httpclient来实现的,支持https的请求。

之前还发过一篇文章专门介绍如何调用阿里云API市场中的IP查询接口,就是https的,大家可以去看一下,步骤也比较简单。

个人认为,http请求转发这块是比较常用的功能,所以优先进行介绍,这样就可以通过脚本实现很多功能,比如给你的手机app提供统一的后台接口,去转接天气预报、短信发送、条码生成等等三方接口。

<?

   描述:HTTP请求转发函数,参数固定9个,支持ssl

   参数:

   0:vUrl.asText 网址,如http://或者https://

   1:vParam.asText 参数,请用&间隔,自行对值编码后传入或者传入后设置需要编码

   2:vHeaders.asText 自定义http头,编码后传入

   3:vMethod.asText='GET' 目前支持soap/post/get三种方法

   4:vTimeout.asInteger=1000 //超时设置,不能少于100毫秒,1000为一秒

   5:RequestCodeing.asInteger=65001 //65001=utf8 936=gbk

   6:vResponseCoding.asInteger=65001

   7:vEncodeing.asBoolean=true //是否对参数进行编码

   8:vDecoding.asBoolean=false //是否对返回值进行解码

   调用:<? HTTP(网址,参数,http头,请求方法,超时时间,提交编码,返回编码,是否编码,是否解码); ?>

   返回:rtc_Text 文本

   案例:

   //获取指定编码文件内容

   HTTP('http://offeu.com/gbk.txt','','','GET',10000,936,936,false,false);' >>> '

   HTTP('http://offeu.com/gbk.txt','','','GET',10000,936,936,false,true);'<br>'

   HTTP('http://offeu.com/utf8.txt','','','GET',10000,65001,65001,false,false);' >>> '

   HTTP('http://offeu.com/utf8.txt','','','GET',10000,65001,65001,false,true);'<br>'

 

   //传utf8过去,再取回来并解码

   HTTP('http://offeu.com/ask/echo.api','id='+Urlencode('测试',65001,true),'','POST',10000,65001,65001,false,false);' >>> '

   HTTP('http://offeu.com/ask/echo.api','id=测试','','POST',10000,65001,65001,true,true);'<br>'

 

   //传gbk过去,再取回来并解码

   HTTP('http://offeu.com/ask/echo.api','id='+Urlencode('测试',936,true),'','POST',10000,65001,65001,false,false);' >>> '

   Urlencode(HTTP('http://offeu.com/ask/echo.api','id=测试','','POST',10000,936,65001,true,false),936,false);'<br>'

 

   //阿里去市场api测试,ssl协议测试

   $x:=JsonToRecord(HTTP('http://offeu.com/ask/getip.api','','','GET',5000,65001,65001,false,false));

   HTTP('https://dm-81.data.aliyun.com/rest/160601/ip/getIpInfo.json','ip='+$x('ip'),//如果脚本在服务器上,直接CLIENT.IP就行,不用转一手

      'Authorization='+URLencode('APPCODE 623dd1f8a3c44be1b21177eda4330978',65001,true),

      'get',10000,65001,65001,false,false);

?>