天软金融分析.NET函数大全 > TSL函数 > 资源访问函数 > 网络访问以及相关函数

SetHttpCallBack    

简述
设置http回调,缺省回调模式是progress模式,可以通过t设定为"header"设置头部回调函数。
定义
SetHttpCallBack(session:intptr;callback:funptr[,t:string]);
参数
名称类型说明
Sessionintegersession ID
CallbackTFUNCTION函数对象,回调函数。可通过findfunction(functionname)方式获取
tString可选参数,设置进度回调或头部模式。
取值说明
"progress"缺省模式,Progress模式指在HTTP请求/响应传输过程中,实时追踪数据传输进度的回调机制。
通过监听数据流的分片传输状态,客户端可动态更新进度条、计算传输速率等
"header"Header模式特指在HTTP响应头接收完成后、响应体未接收前触发的回调机制。
允许客户端在完整数据到达前优先处理头部元数据
返回值
  • 回调函数说明:
    进度(progress)回调模式的回调函数定义为:
    定义function progresscallback(session,TotalDown,Downloaded,TotalUpload,Uploaded);
    参数Session:session ID
    TotalDown:整型,下载总字节数
    Downloaded:整型,已下载总字节数
    TotalUpload:整型,上传总字节数
    Uploaded:整型,已上传总计字节数
    说明进度回调过程中,下载总字节数,已下载总字节数,上传总字节数,已上传总计字节数等不一定在每一次回调都会变化,
    因为会间隔一段时间进行进度更新,即便没有发生进度变化。
    返回回调函数的返回值为0表示继续,如果返回为非0则结束请求。
    若提前结束请求时,此时GETHTTP等函数的返回值与code值为0


    header模式的回调函数定义为:
    定义function headercallback(session,headerline);
    参数Session:session ID
    headerline:字符串,当前行内容
    说明获取头部信息。HEADERLINE是每来一行的内容,HEADER的结束是获得一个独立的回车换行。
    返回回调函数的返回值为0表示继续,非0则结束请求。
    如果仅仅只需要取完HEADER即可,可以当headerline为回车换行时返回-1即可。
    若提前结束请求时,此时GETHTTP等函数的返回值与code值为0


  • 范例

    //下载过程中通过进度回调获取实时下载进度,通过头部回调获取头部信息
    sid:=createhttpsession();
    sethttpcallback(sid,findfunction("DownProg")); //进度回调
    sethttpcallback(sid,findfunction("head"),"header");//头部回调

    s:="http://www.baidu.com"; //小型下载
    m:="http://www.tinysoft.com/download/setup64.exe";//具备下载总量的下载
    l:="http://speed.cloudflare.com/__down?bytes=123456789"; //头部没有content-length的下载
    r:=GetHttp(s,60000,v,code); //可以用s/m/l看看区别
    echo "\r\n=>done ",r,'->',code,'->',length(v),"\r\n";
    return 1;

    //进度回调函数
    function DownProg(sid,AlldnB,dnB,AllupB,upB); //progresscallback

    begin
     if dnB > 0 then //如果已开始下载则打印
     begin
       R:=AlldnB>0?dnB/AlldnB*100:0;
       S:= "->"+DupeString(#8,Ceil(R/10));
       echo S,int(R),"% ",dnB$"/",AlldnB,"\r\n";
     end;
     return 0; //请求继续,返回其它,如return 1;则表示请求到此处就结束
    end;
    //头部回调模型
    function head(sid,hline);

    begin 
      echo hline;
     //if hline="\r\n" then
     //return -1; //如果返回header后就结束请求打开这两行即可
     return 0;//请求继续
    end;

    打印效果:
相关