首页 > 技术文章 > 自定义请求头信息及cookie信息

gaoxiaoniu 2016-09-12 13:49 原文

请求网页的时候有时候我们需要传递一些参数信息,这个时候我们可以将参数放到请求头中,具体使用如下:

这里有小问题就是请求参数的属性名好像不支持下划线,即 HTTP_UID不可用,但是HTTP-UID就可以,使用下划线的后果就是后台服务器不会接受到这个请求参数,至少在我的项目中出现了这个问题

//WAP页面
        UIViewController *web = [[UIViewController alloc]init];
        UIWebView *webView = [[UIWebView alloc]initWithFrame:web.view.bounds];
        [web.view addSubview:webView];
        //设置请求路径
        NSURL *url = [NSURL URLWithString:@"http://www.sdadksaddaskddas"];
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
        
        //添加请求头信息  这个请求头名称需要和后台统一
        NSMutableURLRequest *mutableRequest = [request mutableCopy];    //拷贝request
       //这里我添加了HTTP_UID和HTTP_TOKEN两个请求头属性
        [mutableRequest addValue:[CDUser currentUser].userId forHTTPHeaderField:@"HTTP-UID"];
        [mutableRequest addValue:[CDUser currentUser].token forHTTPHeaderField:@"HTTP-TOKEN"];
        request = [mutableRequest copy];        //拷贝回去
     //加载url
        [webView loadRequest:request];
        web.hidesBottomBarWhenPushed = YES;
        [self.navigationController pushViewController:web animated:YES];    

 

自定义cookie

   // 自定义ccokie 传值
  // 定义 cookie 要设定的 host
    NSURL *cookieHost = [NSURL URLWithString:@"http://www.dasdadadasd"];
    NSDictionary *dic = @{@"key1":value1,@"key2":value2};
    [dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
     // 设定 cookie
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:
                                [NSDictionary dictionaryWithObjectsAndKeys:
                                 [cookieHost host], NSHTTPCookieDomain,
                                 [cookieHost path], NSHTTPCookiePath,
                                 key,NSHTTPCookieName,
                                 obj,NSHTTPCookieValue,
                                 nil]];
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
        
    }];

    [self.webView loadRequest:request];//加载
enumerateKeysAndObjectsUsingBlock是NSDictionary中的一个方法,它有一个参数就是block,这个block携带了三个参数,这将要把dictionary里面的key和value每次一组传递到block.  
enumerateKeysAndObjectsUsingBlock会遍历dictionary并把里面所有的key和value一组一组的展示给你,每组都会执行这个block。
这其实就是传递一个block到另一个方法,在这个例子里它会带着特定参数被反复调用,直到找到一个ENOUGH的key,然后就会通过重新赋值那个BOOL *stop来停止运行,停止遍历同时停止调用block。

推荐阅读