今天遇到一奇葩问题:
在UITextField中输入帐号:189123456 密码:123456
使用GET请求时拼接出来的URL为nil,导致无法访问服务器
原因:在UITextField中输入的数字可能是中文字符
解决办法:拼接URL时将字符串 UTF-8转码
大致代码如下:
//把传进来的URL字符串转变为URL地址
+ (NSURLRequest *)request_URL:(NSString *)urlStr RequestParams:(NSDictionary *)params Method:(NSString *)method
{
//把传进来的URL字符串转变为URL地址
NSURL *requestUrl;
//解析请求参数,用NSDictionary来存参数,通过自定义的函数parseParams把它解析成一个post格式的字符串
NSString *parseParamsResult = [self buildParams:params];
NSString *newUrlStr = [NSString stringWithFormat:@"%@?%@", urlStr, parseParamsResult];
if ([method isEqualToString:@"GET"])
{
requestUrl = [NSURL URLWithString:[newUrlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}else
{
requestUrl = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}
//请求初始化,可以在这针对缓存,超时做出一些设置
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:requestUrl];
//设置请求方式post或者get
[request setHTTPMethod:method];
// 如果是post请求,设置其请求体
if ([method isEqualToString:@"POST"])
{
NSData *postData = [parseParamsResult dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:postData];
}
return request;
}