# 运行时 / 网络与HTTP

## `appendHttpHeader(session, header)`

声明：function

向指定会话中添加请求头信息

| 参数      | 类型   | 说明               |
| --------- | ------ | ------------------ |
| `session` | any    | Session ID         |
| `header`  | string | 要添加的请求头信息 |

返回：any

## `clearHttpHeader(session)`

声明：function

清除会话中的请求头信息

| 参数      | 类型 | 说明                                               |
| --------- | ---- | -------------------------------------------------- |
| `session` | any  | 可选参数，整数类型，session ID，缺省时指当前会话。 |

返回：any

## `destroyHttpSession(session, return_value)`

声明：function

销毁一个Http Session对象，并返回销毁结果，销毁成功返回True。 仅新一代TSL语言支持该函数。

| 参数           | 类型 | 说明                                               |
| -------------- | ---- | -------------------------------------------------- |
| `session`      | int  | 可选参数，整数类型，Session ID，缺省时指当前会话。 |
| `return_value` | bool | object                                             |

返回：bool

## `getHttp(session, url, time_out, value, code)`

声明：function

网络访问以及相关函数相关函数。

| 参数       | 类型   | 说明 |
| ---------- | ------ | ---- |
| `session`  | int    | int  |
| `url`      | string | int  |
| `time_out` | int    |      |
| `value`    | string |      |
| `code`     | int    |      |

返回：bool

## `getHttpContent(session, frompos, return_value)`

声明：function

获得HTTP返回的具体内容，可以从frompos开始取，缺省是取全部。 这个可以方便在progress回调函数中实现文件的临时存贮，亦可以动态打印内容。 仅新一代TSL语言支持该函数。

| 参数           | 类型   | 说明                                                |
| -------------- | ------ | --------------------------------------------------- |
| `session`      | intptr | 指定session ID                                      |
| `frompos`      | int    | 可选参数，指定开始位置，位置从1开始，缺省时指取全部 |
| `return_value` | int    | 获取到的具体内容                                    |

返回：string

## `getHttpCookies(session)`

声明：function

获取指定会话、来自服务器设置的Cookies信息

| 参数      | 类型 | 说明       |
| --------- | ---- | ---------- |
| `session` | any  | Session ID |

返回：any

## `getHttpResponseHeader(session, return_value)`

声明：function

获得HTTP返回的头信息，可以在header回调中看全部合成的header，也可以从已经完成会话的时候获得会话的头部信息。

| 参数           | 类型   | 说明                                                                        |
| -------------- | ------ | --------------------------------------------------------------------------- |
| `session`      | int    | 可选参数，指定session ID。缺省时指当前会话。仅新一代TSL语言支持该可选参数。 |
| `return_value` | string | 当前下载到的完整的头部信息                                                  |

返回：string

## `internetRequest(session, url, refer, header, post_data, user_name, pass_word, result_type, response_code, time_out)`

声明：function

发送Internet访问请求，主要用于Web建立网站。

| 参数            | 类型   | 说明                                                                                                                                                                                  |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `session`       | int    | 可选参数，整数类型，session ID，缺省时指当前会话。多次访问且需要使用同一条链路时，可指定为同个session ID。；注：旧版本TSL语言中，该参数含义为连接模式：0-微软WININET模式；1-TCP模式。 |
| `url`           | string | 字符串类型，需要获取的URL串。如:`http://www.tinysoft.com.cn`                                                                                                                          |
| `refer`         | int    | 引用者。                                                                                                                                                                              |
| `header`        | string | 发送请求的Http请求头。                                                                                                                                                                |
| `post_data`     | int    | 发送的数据。                                                                                                                                                                          |
| `user_name`     | int    | 用户名。                                                                                                                                                                              |
| `pass_word`     | string | 密码。                                                                                                                                                                                |
| `result_type`   | string | 非0则Result返回Binary类型，为0则Result返回字符串类型。                                                                                                                                |
| `response_code` | string | 存放返回的HTTP代码。例如，当正确的时候返回为200。                                                                                                                                     |
| `time_out`      | string | 获取URL等待的毫秒数。                                                                                                                                                                 |

返回：bool

## `postHttp(session, url, content, time_out, value, code)`

声明：function

以POST方式从指定的HTTP URL获得内容。

| 参数       | 类型   | 说明                                                                                                                                                                                  |
| ---------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `session`  | int    | 可选参数，整数类型，session ID，缺省时指当前会话。多次访问且需要使用同一条链路时，可指定为同个session ID。；注：旧版本TSL语言中，该参数含义为连接模式：0-微软WININET模式；1-TCP模式。 |
| `url`      | string | 字符串类型，需要获取的URL串。如:`http://www.tinysoft.com.cn`                                                                                                                          |
| `content`  | string | 二进制或字符串类型；要发送的数据。                                                                                                                                                    |
| `time_out` | int    | 获取URL等待的毫秒数。                                                                                                                                                                 |
| `value`    | string | 存放返回的内容。                                                                                                                                                                      |
| `code`     | int    | 存放返回的HTTP代码。例如，当正确的时候返回为200。                                                                                                                                     |

返回：bool

## `setHttpAuth(session, user_name, pass_word, _type)`

声明：function

设置指定会话中认证信息

| 参数        | 类型   | 说明                                                         |
| ----------- | ------ | ------------------------------------------------------------ |
| `session`   | any    | Session ID                                                   |
| `user_name` | string | 用户名                                                       |
| `pass_word` | string | 密码                                                         |
| `_type`     | any    | 可选参数，认证信息类型；可多次调用以设置不同类型的认证信息： |

返回：any

## `setHttpCallBack(session, callback, t, return_value)`

声明：function

设置http回调，缺省回调模式是progress模式，可以通过t设定为"header"设置头部回调函数。仅新一代TSL语言支持该函数。

| 参数           | 类型                                                                               | 说明                                                         |
| -------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| `session`      | int                                                                                | session ID                                                   |
| `callback`     | TFUNCTION                                                                          | 函数对象，回调函数。可通过findfunction(functionname)方式获取 |
| `t`            | string                                                                             | 可选参数，设置进度回调或头部模式。                           |
| `return_value` | 缺省模式，Progress模式指在HTTP请求\|响应传输过程中，实时追踪数据传输进度的回调机制 | 无                                                           |

返回：回调函数的返回值为0表示继续，非0则结束请求

## `setHttpCookies(session, cookies)`

声明：function

设置指定会话中Cookies信息

| 参数      | 类型   | 说明                                                                                                                                            |
| --------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `session` | any    | Session ID                                                                                                                                      |
| `cookies` | string | 要设置的Cookies值信息，多个Cookie以分号分隔，如SESSIONID=ABC123;THEME=DARK；一般无需设置，同一会话中发送的多次请求会自动携带服务器设置的Cookies |

返回：any

## `setHttpMode(session, mode, return_value)`

声明：function

设置chunked模式（分段模式），主要用于大模型类的一个请求分段输出模式，支持类似于大模型一样按单词吐词输出。仅新一代TSL语言支持该函数。

| 参数           | 类型 | 说明                 |
| -------------- | ---- | -------------------- |
| `session`      | any  | 指定session ID       |
| `mode`         | any  | 输出模式，取值如下： |
| `return_value` | any  | 无                   |

返回：any

## `setHttpProxy(session, proxy_addr, proxy_type)`

声明：function

设置指定会话中代理信息

| 参数         | 类型   | 说明                 |
| ------------ | ------ | -------------------- |
| `session`    | any    | Session ID           |
| `proxy_addr` | string | 代理地址             |
| `proxy_type` | any    | 可选参数，代理类型： |

返回：any

## `setHttpVerifySsl(session, verify)`

声明：function

设置指定会话是否校验服务器证书

| 参数      | 类型 | 说明       |
| --------- | ---- | ---------- |
| `session` | any  | Session ID |
| `verify`  | bool | object     |

返回：any

## URL 内容函数

## `urlToText(a_src)`

声明：function

将URL标准格式的串转化为文本字符串

| 参数    | 类型   | 说明       |
| ------- | ------ | ---------- |
| `a_src` | string | 字符串类型 |

返回：string

### 示例

```tsl
a_src := "%23abcd%20%2010";
return urlToText(a_src);
// 结果：#abcd 10
```

## `NetProfitGrowRatio_12(r_date)`

声明：function

最近12个月的净利润增长率(%)。 （1）归属于母公司所有者净利润数据取自合并利润分配表； （2）V1：RDate报告期最近12个月的归属于母公司所有者净利润； （3）V2：上年同期PRDate最近12个月的归属于母公司所有者净利润； （4）最近12个月的净利润增长率(%)=(V1-V2)/abs(V2)\*100。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetDebt_12(r_date)`

声明：function

最近12个月的净债务=付息债务-最近12个月的期末现金余额。 （1）付息债务=短期借款+长期借款。 （2）从资产负债表中取短期债务和长期债务，从现金流量表中取得期末现金余额。根据算法得到净债务。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetAssetsPS_12(r_date)`

声明：function

最近12个月的每股净资产。 （1）最近12个月的每股净资产=最近12个月归属母公司股东权益合计/总股本； （2）归属母公司股东权益合计取自合并资产负债表，根据最近12个月的算法计算得到最近12个月归属母公司股东权益合计【注1】； （3）总股本取RDate当天的数据。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetAssetsPSGrowRatio_12(r_date)`

声明：function

最近12个月的每股净资产增长率(%)。 （1）函数从合并利润分配表中取该报告期归属母公司股东权益合计，根据算法得到最近12个月的归属母公司股东权益合计【注1】； （2）取Rdate当日的总股本； （3）最近12个月的每股净资产V1=最近12个月的归属母公司股东权益合计/总股本； （4）同理计算上年同期的最近12个月的每股净资产V2； （5）最近12个月的每股净资产增长率(%)=(V1-V2)/abs(V2)\*100。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetEquityReturn_12(r_date)`

声明：function

最近12个月的净资产收益率(%)。 （1）净资产收益率(%)=最近12个月净利润/股东权益×100； （2）净利润取自合并利润分配表，根据最近12个月的算法得到最近12个月净利润【注1】； （3）股东权益取自合并资产负债表，只取报告期RDate的数据。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetCashfromIA_12(r_date)`

声明：function

最近12个月的投资活动产生的现金流量净额。 （1）投资活动产生的现金流量净额取自合并现金流量表； （2）根据最近12个月的算法得到最近12个月的投资活动产生的现金流量净额【注1】。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetCashfromOAGrowRatio_12(r_date)`

声明：function

最近12个月的经营活动产生的现金流量净额增长率(%)。 （1）经营活动产生的现金流量净额取自合并现金流量表；根据最近12个月的算法得到最近12个月的经营活动产生的现金流量净额V1【注1】； （2）同理取得上年同期最近12个月的经营活动产生的现金流量净额V2； （3）最近12个月的经营活动产生的现金流量净额增长率(%)=(V1-V2)/abs(V2)\*100。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetCashFromOA_12(r_date)`

声明：function

最近12个月的经营活动产生的现金流量净额。 （1）经营活动产生的现金流量净额取自合并现金流量表； （2）根据最近12个月的算法得到最近12个月的经营活动产生的现金流量净额【注1】。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetCashFromFA_12(r_date)`

声明：function

最近12个月的筹资活动产生的现金流量净额。 （1）筹资活动产生的现金流量净额取自合并现金流量表； （2）根据最近12个月的算法得到最近12个月的筹资活动产生的现金流量净额【注1】。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetIncrease_12(r_date)`

声明：function

最近12个月的现金及现金等价物净增加额。 （1）现金及现金等价物净增加额取自合并现金流量表； （2）根据最近12个月的算法得到最近12个月的现金及现金等价物净增加额【注1】。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetProfit_12(r_date)`

声明：function

最近12个月的归属于母公司所有者的净利润。 （1）母公司所有者的净利润取自合并利润分配表； （2）根据最近12个月的算法得到最近12个月的母公司所有者的净利润【注1】。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetProfit2_12(r_date)`

声明：function

最近12月净利润(业绩快报)，与系统参数(股票)相关。

| 参数     | 类型     | 说明         |
| -------- | -------- | ------------ |
| `r_date` | datetime | 整数。报告期 |

返回：float

## `NetEquityReturn_Year(r_date, n)`

声明：function

最近N年的净资产收益率(%)。 （1）取向后兼容的最新年报Q1，取N-1年前同期的年报Q2； （2）取Q2报告期的归属于母公司所有者的净利润（合并利润分配表）v1，以及Q2报告期的归属母公司股东权益合计（合并资产负债表）v2； （3）最近N年的净资产收益率(%)=v1/v2\*100。

| 参数     | 类型     | 说明            |
| -------- | -------- | --------------- |
| `r_date` | datetime | 整数，报告期；  |
| `n`      | any      | 整数，最近N年。 |

返回：float

## `NetAssetsPerShare_Year(r_date)`

声明：function

最近1年的每股净资产。 （1）取向后兼容RDate的最新报告期NewRDate； （2）从资产负债表中取报告期NewRDate的归属母公司股东权益合计V1，以及NewRDate当天的总股本V2； （3）最近1年的每股净资产=V1/V2； （4）注意，资产负债表的科目不统计最近12个月的数据，只返回报告期的数据。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期； |

返回：float

## `NetProfit_Year(r_date, n)`

声明：function

最近N年的归属于母公司所有者的净利润。 （1）取向后兼容的最新年报Q1，取N-1年前同期的年报Q2； （2）在合并利润分配表取Q2报告期的归属于母公司所有者的净利润。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期； |
| `n`      | any      | 整数，最近N年  |

返回：float

## `NetIncrease_Q(r_date)`

声明：function

季度的现金及现金等价物净增加额。 （1）从合并现金流量表中取出现金及现金等价物净增加额； （2）按照季度的算法，计算出RDate季度的现金及现金等价物净增加额【注1】。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetCashfromIA_Q(r_date)`

声明：function

季度的投资活动产生的现金流量净额。 （1）从合并现金流量表中取出投资活动产生的现金流量净额； （2）按照季度的算法，计算出RDate季度的投资活动产生的现金流量净额【注1】。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetCashFromOA_Q(r_date)`

声明：function

季度的经营活动产生的现金流量净额。 （1）从合并现金流量表中取出经营活动产生的现金流量净额； （2）按照季度的算法，计算出RDate季度的经营活动产生的现金流量净额【注1】。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期。 |

返回：float

## `NetCashFromFA_Q(r_date)`

声明：function

计算指定报告期最近1季度的筹资活动产生的现金流。 根据季度数据的算法【注3】，函数从合并现金流量表中取出多个报告期的筹资活动产生的现金流，计算最近1季度的筹资活动产生的现金流。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期； |

返回：float

## `NetProfit_Q(r_date)`

声明：function

计算指定报告期最近1季度的净利润。 根据季度数据的算法【注3】，函数从合并现金流量表中取出多个报告期的筹资活动产生的现金流，计算最近1季度的净利润。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `r_date` | datetime | 整数，报告期； |

返回：float

## `NetProfit2_Q(r_date)`

声明：function

归属于母公司所有者净利润(业绩快报)，与系统参数(股票)相关。 实数。归属于母公司所有者净利润(业绩快报)。

| 参数     | 类型     | 说明         |
| -------- | -------- | ------------ |
| `r_date` | datetime | 整数。报告期 |

返回：float

## `netassetweeklylist_call(fund_arr, end_t, beg_t, sort_by, sort_order, return_number)`

声明：function

基金列表指定区间单位净值、累计净值及其变化。

| 参数            | 类型     | 说明                                   |
| --------------- | -------- | -------------------------------------- |
| `fund_arr`      | array    | 数组。基金列表。                       |
| `end_t`         | datetime | 日期。截止日期。                       |
| `beg_t`         | datetime | 日期。同比日期。                       |
| `sort_by`       | string   | 字符串。排序字段，取值如下:            |
| `sort_order`    | any      | 整数。排序方法，1表示正序，0表示逆序。 |
| `return_number` | any      | 整数。返回个数。                       |

返回：array

## `setHttpAcceptencodingon(session, is_zip)`

声明：function

设定是否支持压缩。

| 参数      | 类型   | 说明                       |
| --------- | ------ | -------------------------- |
| `session` | comobj | session ID                 |
| `is_zip`  | bool   | 是否支持压缩传输，默认支持 |

返回：any

### 示例

```tsl
url := "http://www.baidu.com";
sid := createHttpSession();
setHttpAcceptencodingon(sid, false); // 设定为不允许压缩传输
setHttpCallBack(sid, findfunction("DownProg01")); // 进度回调
r := getHttp(url, 60000, v, code);
echo "\r\nDone", '->code:', code, '->返回内容总长度:', length(v), "\r\n";
return 0;
// --------------进度回调函数---------------------
function DownProg01(sid, alldn_b, dn_b, allup_b, up_b); // progresscallback-不提前结束
begin
if dn_b > 0 then // 如果大于0则打印
begin
echo "AlldnB:", alldn_b, ",dnB:", dn_b, ",AllupB:", allup_b, ",upB:", up_b, "\r\n";
end;
return 0; // not done
end;
// 打印信息如下：
```

## `setHttpAcceptencoding(session, acceptencodingstr)`

声明：function

设定压缩格式编码类型。

| 参数                | 类型   | 说明                |
| ------------------- | ------ | ------------------- |
| `session`           | comobj | session ID          |
| `acceptencodingstr` | string | Accept-Encoding类型 |

返回：any

### 示例

```tsl
url := "http://www.baidu.com";
sid := createHttpSession();
setHttpAcceptencoding(sid, "gzip"); // 设定压缩格式编码类型
setHttpCallBack(sid, findfunction("DownProg01")); // 进度回调
r := getHttp(url, 60000, v, code);
echo "\r\nDone", '->code:', code, '->返回内容总长度:', length(v), "\r\n";
return 0;
// --------------进度回调函数---------------------
function DownProg01(sid, alldn_b, dn_b, allup_b, up_b); // progresscallback-不提前结束
begin
if dn_b > 0 then // 如果大于0则打印
begin
echo "AlldnB:", alldn_b, ",dnB:", dn_b, ",AllupB:", allup_b, ",upB:", up_b, "\r\n";
end;
return 0; // not done
end;
// 打印结果：
// 注：当http进度回调时，当服务器使用分块传输（启用压缩通常会使用分块传输）时， 无法预先知道总大小所以可能出现为0的情况，属于正常现象。
```
