首页 > 代码库 > iOS POST请求 有中文的时候

iOS POST请求 有中文的时候

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

下面镔哥写两种案例:

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

//1:设置URL

    NSString *host = HOST;

    NSString *usename = @"fuck";

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

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

   //完整的设置参数

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

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

    //得到完整的url

    NSURL *url1 = [NSURLURLWithString:urlString];



    //2:Request请求

            NSMutableURLRequest *request = [[NSMutableURLRequestalloc]initWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:10];

    [request setHTTPMethod:@"POST"];

    //第三步,连接服务器

    NSError * error = nil;

    NSData *reqData  = [NSURLConnectionsendSynchronousRequest:request returningResponse:nilerror:&error];

    

//    //3:将请求转换二进制

//    NSData *reqData = http://www.mamicode.com/[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    if(reqData =http://www.mamicode.com/= nil){

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

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

        }

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

        [alert show];

        return;

    }else{

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

    }

    NSDictionary *reqDic=[NSJSONSerializationJSONObjectWithData:reqData options:NSJSONReadingAllowFragmentserror:nil];

    NSString *info = [NSStringstringWithFormat:@"%@",[reqDicobjectForKey:@"info"]];

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

    //4:打印数据

    NSString *errcode = [NSStringstringWithFormat:@"%@", [reqDicobjectForKey:@"errcode"]];

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

        NSLog(@"成功了");

    }else

    {

        UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"获取广告标识符失败"message:info delegate:selfcancelButtonTitle:@"确定"otherButtonTitles:nil,nil];

        [alert show];

    }

}



2:第二种写法对比(其实就是加了一句话)

/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 = [urlStringstringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

    NSURL * url = [NSURLURLWithString:urlstr];



    //2:Request请求

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

    [request setHTTPMethod:@"POST"];

    //第三步,连接服务器

    NSError * error = nil;

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

    

//    //3:将请求转换二进制

//    NSData *reqData = http://www.mamicode.com/[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    if(reqData =http://www.mamicode.com/= nil){

        if(error){//这样写有个好处,就是如果解析数据不成功,系统会列出原因,我就因为写了这句话才知道出现什么原因:Error Domain=NSURLErrorDomain Code=-1002 "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];

    }

}





iOS POST请求 有中文的时候