星五博客

WebPascal脚本模型教程 - http跨域请求

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

<?
    描述: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);
?>

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

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