美文网首页
NSURLSession监听请求状态

NSURLSession监听请求状态

作者: crazyfox | 来源:发表于2021-08-03 16:35 被阅读0次

    iOS10以上支持

    • (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
    @interface NSURLSessionTaskMetrics : NSObject
    /*
     * 数组包含为任务执行期间创建的每个请求/响应事务收集的对应数据。
     */
    @property (copy, readonly) NSArray<NSURLSessionTaskTransactionMetrics *> *transactionMetrics;
    /*
     * 从任务创建时间到任务完成时间的间隔。
     * 任务创建时间是实例化任务的时间。
     * 任务完成时间是指任务即将将其内部状态更改为已完成的时间。
     */
    @property (copy, readonly) NSDateInterval *taskInterval;
    /*
     * 重定向次数. 状态码302,设置Location=重定向地址
     */
    @property (assign, readonly) NSUInteger redirectCount;
    
    @end
    
    12438546-5ebced7d9f8ef673.jpg

    参数代表含义

    //表示事务请求。
    @property (copy, readonly) NSURLRequest *request;
    
    //如果发生错误而没有生成响应,则此属性为nil。
    //表示事务响应。如果发生错误且没有生成响应,则可以为nil。
    @property (nullable, copy, readonly) NSURLResponse *response;
    
    //任务开始从服务器或本地获取资源的时间。
    @property (nullable, copy, readonly) NSDate *fetchStartDate;
    
    //任务开始查找资源名称之前的时间。
    //如果使用持久连接,或者从本地资源检索资源,则此值为nil。
    @property (nullable, copy, readonly) NSDate *domainLookupStartDate;
    
    //名称查找完成后的时间。
    //如果使用持久连接,或者从本地资源检索资源,则此值为nil。
    @property (nullable, copy, readonly) NSDate *domainLookupEndDate;
    
    /*任务开始建立到服务器的TCP连接之前的时间。
    如果使用持久连接,或者从本地资源检索资源,则此值为nil。
    connectStartDate是用户代理开始建立到服务器的连接之前的时间。
    例如,这将对应于用户代理开始尝试建立TCP连接之前的时间。*/
    @property (nullable, copy, readonly) NSDate *connectStartDate;
    
    /*任务启动TLS安全握手以保护当前连接之前的时间。
    如果未使用加密连接、使用持久连接或从本地资源检索资源,则此值为nil。
    如果使用加密连接,secureConnectionStartDate是用户代理启动安全握手以保护当前连接之前的时间。
    例如,这将对应于用户代理开始TLS握手之前的时间。
    如果未使用加密连接,则将此属性设置为nil。*/
    @property (nullable, copy, readonly) NSDate *secureConnectionStartDate;
    
    /*安全握手完成后立即发生的时间。
    如果未使用加密连接、使用持久连接或从本地资源检索资源,则此值为nil。
    如果使用加密连接,secureConnectionEndDate是安全握手完成后的立即时间。
    如果未使用加密连接,则将此属性设置为nil。
    */
    @property (nullable, copy, readonly) NSDate *secureConnectionEndDate;
    
    
    /*任务完成后立即建立到服务器的连接的时间。
    此值用于完成与安全性相关的握手和其他握手。如果使用持久连接,或者从本地资源检索资源,则该值为nil。
    connectEndDate是用户代理完成与服务器的连接后的立即时间,包括完成与安全性相关的握手和其他握手。
    */
    @property (nullable, copy, readonly) NSDate *connectEndDate;
    
    /*任务开始请求资源之前的时间,无论从服务器还是本地资源检索资源。
    例如,这将对应于用户代理发送HTTP GET请求之前的时间。
    */
    @property (nullable, copy, readonly) NSDate *requestStartDate;
    
    /*任务完成后立即请求资源的时间,无论它是从服务器或本地资源检索到的。
    requestEndDate是用户代理完成对源的请求后立即出现的时间,不管是从服务器检索到的资源还是本地资源。
    例如,这将对应于用户代理完成发送请求的最后一个字节后的立即时间。
    */
    @property (nullable, copy, readonly) NSDate *requestEndDate;
    
    /*任务从服务器或本地资源接收到响应的第一个字节后的立即时间。
    例如,这将对应于用户代理收到HTTP响应的第一个字节后的立即时间。
    */
    @property (nullable, copy, readonly) NSDate *responseStartDate;
    
    /*任务接收到资源的最后一个字节后的立即时间。
    responseEndDate是用户代理收到资源的最后一个字节后的立即时间。
    */
    @property (nullable, copy, readonly) NSDate *responseEndDate;
    
    /*用于获取资源的网络协议。
    当配置代理并建立隧道连接时,该属性返回隧道协议的值,该值由ALPN协议ID标识序列标识,如RFC 7310所示。例如:
    如果没有使用代理,并且协商了HTTP/2,则返回h2。
    如果代理使用HTTP/1.1,并且隧道连接是HTTP/2,则返回h2。
    如果代理使用HTTP/1.1,并且没有通道,则返回HTTP/1.1。
    */
    @property (nullable, copy, readonly) NSString *networkProtocolName;
    
    /*一个布尔值,指示是否使用代理连接来获取资源。
    如果使用代理连接获取资源,则将此属性设置为YES。
    */
    @property (assign, readonly, getter=isProxyConnection) BOOL proxyConnection;
    
    /*一个布尔值,指示是否使用持久连接来获取资源。
    如果使用持久连接获取资源,则将此属性设置为YES。
    */
    @property (assign, readonly, getter=isReusedConnection) BOOL reusedConnection;
    
    /*一个值,指示是否从本地缓存加载、推送或检索资源。
    指示是否从本地缓存加载、推送或检索资源。
    */
    @property (assign, readonly) NSURLSessionTaskMetricsResourceFetchType resourceFetchType;
    

    ios13支持字段 本地ip端口 远程ip端口

    /*
     * localAddress is the IP address string of the local interface for the connection.
     *
     * For multipath protocols, this is the local address of the initial flow.
     *
     * If a connection was not used, this attribute is set to nil.
     */
    @property (nullable, copy, readonly) NSString *localAddress API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0));
    
    /*
     * localPort is the port number of the local interface for the connection.
     *
     * For multipath protocols, this is the local port of the initial flow.
     *
     * If a connection was not used, this attribute is set to nil.
     */
    @property (nullable, copy, readonly) NSNumber *localPort API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0));
    
    /*
     * remoteAddress is the IP address string of the remote interface for the connection.
     *
     * For multipath protocols, this is the remote address of the initial flow.
     *
     * If a connection was not used, this attribute is set to nil.
     */
    @property (nullable, copy, readonly) NSString *remoteAddress API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0));
    
    /*
     * remotePort is the port number of the remote interface for the connection.
     *
     * For multipath protocols, this is the remote port of the initial flow.
     *
     * If a connection was not used, this attribute is set to nil.
     */
    @property (nullable, copy, readonly) NSNumber *remotePort API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0));
    
    
    

    相关文章

      网友评论

          本文标题:NSURLSession监听请求状态

          本文链接:https://www.haomeiwen.com/subject/xpsevltx.html