程序员人生 网站导航

iOS POST请求 有中文的时候

栏目:综合技术时间:2014-12-09 08:45:40

镔哥,最近post要求遇到1些问题,当有中文的时候是要求不成功

下面镔哥写两种案例:

1:通常post要求:(有中文不成功)

//1:设置URL

    NSString *host = HOST;

    NSString *usename = @"fuck";

    NSString *queryString = [NSString stringWithFormat:@"/app/clickTableScreen?userName=%@&idfa=%@&operator=%@&systemVersion=%@&networkState=%@&deviceName=%@&memorySize=%@&model=%@",usename,adId, [self checkCarrier],phoneVersion,netStr,userPhoneName,totalDiskSpaceStr, [LoginViewController deviceString]] ;

     NSLog(@"querString:%@",queryString);

   //完全的设置参数

    NSString *urlString = [NSString stringWithFormat:@"%@%@",host,queryString];

    NSLog(@"参数:%@",urlString);

    //得到完全的url

    NSURL *url1 = [NSURL URLWithString:urlString];



    //2:Request要求

            NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

    [request setHTTPMethod:@"POST"];

    //第3步,连接服务器

    NSError * error = nil;

    NSData *reqData  = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];

    

//    //3:将要求转换2进制

//    NSData *reqData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    if(reqData == nil){

        if(error){//这样写有个好处,就是如果解析数据不成功,系统会列出缘由,我就由于写了这句话才知道出现甚么缘由:Error Domain=NSURLErrorDomain Code=⑴002 "unsupported URL" UserInfo=0x14ed24c0 {NSUnderlyingError=0x

             NSLog(@"error = %@", error);

        }

        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"网络不稳定,请稍后尝试!" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"ok", nil];

        [alert show];

        return;

    }else{

        NSLog(@"error = %@", error);

    }

    NSDictionary *reqDic=[NSJSONSerialization JSONObjectWithData:reqData options:NSJSONReadingAllowFragments error:nil];

    NSString *info = [NSString stringWithFormat:@"%@",[reqDic objectForKey:@"info"]];

    NSLog(@"参数字典:%@",reqDic);

    //4:打印数据

    NSString *errcode = [NSString stringWithFormat:@"%@", [reqDic objectForKey:@"errcode"]];

    if ([errcode isEqualToString:@"0"]) {

        NSLog(@"成功了");

    }else

    {

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"获得广告标识符失败" message:info delegate:self cancelButtonTitle:@"肯定" otherButtonTitles:nil, nil];

        [alert show];

    }

}



2:第2种写法对照(其实就是加了1句话)

/1:设置URL

    NSString *host = HOST;

    NSString *usename = @"fuck";

    NSString *queryString = [NSString stringWithFormat:@"/app/clickTableScreen?userName=%@&idfa=%@&operator=%@&systemVersion=%@&networkState=%@&deviceName=%@&memorySize=%@&model=%@",usename,adId, [self checkCarrier],phoneVersion,netStr,userPhoneName,totalDiskSpaceStr, [LoginViewController deviceString]] ;

     NSLog(@"querString:%@",queryString);

   //完全的设置参数

    NSString *urlString = [NSString stringWithFormat:@"%@%@",host,queryString];

    NSLog(@"参数:%@",urlString);

    //得到完全的url

    //有中文的时候要转码

    NSString * urlstr = [urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

    NSURL * url = [NSURL URLWithString:urlstr];



    //2:Request要求

            NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

    [request setHTTPMethod:@"POST"];

    //第3步,连接服务器

    NSError * error = nil;

    NSData *reqData  = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];

    

//    //3:将要求转换2进制

//    NSData *reqData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    if(reqData == nil){

        if(error){//这样写有个好处,就是如果解析数据不成功,系统会列出缘由,我就由于写了这句话才知道出现甚么缘由:Error Domain=NSURLErrorDomain Code=⑴002 "unsupported URL" UserInfo=0x14ed24c0 {NSUnderlyingError=0x

             NSLog(@"error = %@", error);

        }

        UIAlertView * alert = [[UIAlertView allocinitWithTitle:@"提示" message:@"网络不稳定,请稍后尝试!"delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"ok"nil];

        [alert show];

        return;

    }else{

        NSLog(@"error = %@", error);

    }

    NSDictionary *reqDic=[NSJSONSerialization JSONObjectWithData:reqData options:NSJSONReadingAllowFragments error:nil];

    NSString *info = [NSString stringWithFormat:@"%@",[reqDic objectForKey:@"info"]];

    NSLog(@"参数字典:%@",reqDic);

    //4:打印数据

    NSString *errcode = [NSString stringWithFormat:@"%@", [reqDic objectForKey:@"errcode"]];

    if ([errcode isEqualToString:@"0"]) {

        NSLog(@"成功了");

    }else

    {

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"获得广告标识符失败" message:info delegate:selfcancelButtonTitle:@"肯定" otherButtonTitles:nilnil];

        [alert show];

    }

}





------分隔线----------------------------
------分隔线----------------------------

最新技术推荐