跳到主要内容

请求数据

自定义请求头

SDK 支持配置采集「请求头」参数,用以进行「后端调用链追踪」。

  • 相关接口
/**
* @key 设置为要采集的请求头中的headerkey值
*/
+(void)setRequestIDHeaderKey:(NSString *)key;
  • 代码示例
int main(int argc, char * argv[]) {
@autoreleasepool {
// 调用位置建议在初始化,其他位置首次不采集
[NBSAppAgent startWithAppID:@"appkey"];
[NBSAppAgent setRequestIDHeaderKey:@"key"];
...
}
}

SDK传输数据使用国密加密

SDK传输数据支持国密加密,调用该接口开启国密加密,默认不开启「前提:需工程中引入NBSGMKit.framework」。

注:该接口需要在SDK初始化前调用。

  • 相关接口
/**
* @need 传入YES,则SDK传输数据使用国密加密。
*/
+ (void)encryptionRequired:(BOOL)need;
  • 代码示例
int main(int argc, char * argv[]) {
@autoreleasepool {
//开启国密加密
[NBSAppAgent encryptionRequired:YES];
//默认为https,如果redirect_host为http协议的话则需要调用该接口。
[NBSAppAgent setHttpEnabled:YES];
//redirect_host为平台服务器地址
[NBSAppAgent setRedirectURL:@"redirectUrl"];
//Your_appkey从平台中获取
[NBSAppAgent startWithAppID:@"APPkey"];
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

信安SDK请求采集开关

信安SDK请求采集开关,默认关闭,调用此接口开启。

  • 相关接口
/**
* @brief 开启信安SDK 请求监控,默认关闭
* @note
* 听云SDK监控信安SDK的请求原理为通过拦截信安SDK发请求的接口来获得请求的性能数据,如果信安SDK的请求接口更新(方法名称改变或者参数发生变化),则可能导致拦截失败,严重可能发生崩溃,所以开启该功能或者更新信安SDK后,都应该进行测试。
*/
+ (void)startIMSecurityMonitor;

  • 代码示例
int main(int argc, char * argv[]) {
NSString * appDelegateClassName;
@autoreleasepool {
...
[NBSAppAgent startIMSecurityMonitor];//需在SDK start 之前调用
[NBSAppAgent setRedirectURL:@"redirectUrl"];
[NBSAppAgent startWithAppID:@"APPkey"];
...
}
}

支持采集libcurl请求数据

获取libcurl请求性能数据,如:IP、DNS、TCP、SSL等性能指标。
  • 相关接口
/**
* for record curl networl.
*/
void nbsGetCurlNetworkInfo(void *curl,int curlcode,void *ptr);
  • 代码示例
- (void)libcurlNetwork
{
...
CURL *curl = curl_easy_init();
CURLcode res;
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");
res = curl_easy_perform(curl);
nbsGetCurlNetworkInfo(curl, res, &curl_easy_getinfo);
curl_easy_cleanup(curl);
}
...
}

请求内容采集

调用该接口后,SDK 会采集 Http/Https 请求的请求头、响应头、请求体、响应体

当请求头中Content-Type值为application/json、application/x-www-form-urlencoded、text/plain时,会采集请求体。

当响应头中Content-Type值为application/json、text/plain时,会采集响应体。

注:当平台「采集网络请求内容」开启且调用该接口时,请求内容采集功能才开启。

  • 相关接口
/**
* 启用请求内容的获取
*/
+ (void)enableNetworkContentRecord;
  • 代码示例
int main(int argc, char * argv[]) {
NSString * appDelegateClassName;
@autoreleasepool {
...
[NBSAppAgent enableNetworkContentRecord];
[NBSAppAgent setRedirectURL:@"redirectUrl"];
[NBSAppAgent startWithAppID:@"appkey"];

...
appDelegateClassName = NSStringFromClass([AppDelegate class]);
}
return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}

自定义请求头/请求体采集

调用该接口后,可以自定义设置采集的请求头/请求体信息,调用多次则覆盖。

注:若平台和接口都配置请求头采集,接口配置优先。

  • 相关接口
/**
* 设置自定义的请求头与请求体获取方式
*/
+ (void)setupRequestSanitizer:(void (^)(NBSRequestSanitizer *requestSanitizer))configureSanitizer;
  • 代码示例

    • 请求头采集
     [NBSAppAgent setupRequestSanitizer:^(NBSRequestSanitizer *requestSanitizer) {
    [requestSanitizer setRequestHeaderSanitizionWithBlock:^NSDictionary * _Nullable(NSURL * _Nonnull url, NSDictionary * _Nonnull allHTTPHeaderFields) {
    // 当请求的URL为包含www.tingyun.com时,不采集traceparent、traceid这两个请求头
    if([url.absoluteString containsString:@"www.tingyun.com"])
    {
    NSMutableDictionary *dict = [allHTTPHeaderFields mutableCopy];
    [dict removeObjectsForKeys:@[@"traceparent",@"traceid"]];
    // 返回自定义采集的请求头
    return dict;
    }
    // 返回所有请求头
    return allHTTPHeaderFields;
    }];
    }];
    • 请求体采集
    [NBSAppAgent setupRequestSanitizer:^(NBSRequestSanitizer *requestSanitizer) {
    [requestSanitizer setRequestBodySanitizionWithBlock:^NSString * _Nullable(NSURL * _Nonnull url, NSDictionary * _Nonnull allHTTPHeaderFields, NSData * _Nonnull body) {
    // 请求的URL包含www.tingyun.com时,返回自定义请求体信息
    if([url.absoluteString containsString:@"www.tingyun.com"])
    {
    // 返回自定义请求体信息
    return @"";
    }
    NSString *reqBody = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];
    return reqBody;
    }];

    }];

可以将请求头和请求体放一起配置。

自定义响应头/响应体采集

调用该接口后,可以自定义设置采集的响应头/响应体信息,调用多次则覆盖。

注:若平台和接口都配置响应头采集,接口配置优先。

  • 接口
/**
* 设置自定义的响应头与响应体获取方式
*/
+ (void)setupReponseSanitizer:(void (^)(NBSResponseSanitizer *responseSanitizer))configureSanitizer;
  • 示例

    • 响应头采集
    [NBSAppAgent setupReponseSanitizer:^(NBSResponseSanitizer *responseSanitizer) {
    [responseSanitizer setResponseHeaderSanitizionWithBlock:^NSDictionary * _Nullable(NSHTTPURLResponse * _Nonnull response) {
    // 设置当请求的URL包含www.tingyun.com时,不采集x-Request-Id、Tracecode响应头
    if( [response.URL.absoluteString containsString:@"www.tingyun.com"]){
    NSMutableDictionary *dict = [response.allHeaderFields mutableCopy];
    [dict removeObjectsForKeys:@[@"x-Request-Id",@"Tracecode"]];
    // 返回自定义采集的响应头
    return dict;
    }
    // 返回所有响应头
    return response.allHeaderFields;
    }];
    }];
    • 响应体采集
        [NBSAppAgent setupReponseSanitizer:^(NBSResponseSanitizer *responseSanitizer) {

    [responseSanitizer setResponseBodySanitizionWithBlock:^NSString * _Nullable(NSHTTPURLResponse * _Nonnull response, NSData * _Nonnull body) {
    // 当请求的URL包含www.tingyun.com时,返回自定义响应体信息
    if([response.URL.absoluteString containsString:@"www.tingyun.com"])
    {
    // 返回自定义响应体信息
    return @"";
    }
    NSString *reqBody = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];
    return reqBody;
    }];

    }];

可以将响应头和响应体放一起配置。