AFN请求的一个坑
来源:互联网 发布:悟空 知乎 编辑:程序博客网 时间:2024/06/01 21:07
今天帮助朋友调试一个接口
http://180.76.248.109/YWZ/ywz2/sp_ywz2_back_interface?inParameter={"call_name":"sp_tab_user_login","data":{"type":"1","phone_no":"18983766960","passwd":"123456"}}
一看到这个接口很奇怪,因为通常登录请求一般使用post,上面的请求使用的get请求 而且参数是字典嵌套字典,在拼接参数的时候客户端需要做 几次字典转字符串的操作
一开始是很奇怪的
AFHTTPSessionManager *manager = [[AFHTTPSessionManageralloc] init];
manager.requestSerializer = [AFHTTPRequestSerializerserializer];
manager.responseSerializer = [AFHTTPResponseSerializerserializer];
// 设置超时时间
[manager.requestSerializerwillChangeValueForKey:@"timeoutInterval"];
manager.requestSerializer.timeoutInterval =10.f;
[manager.requestSerializerdidChangeValueForKey:@"timeoutInterval"];
[manager.requestSerializersetValue:@"gzip"forHTTPHeaderField:@"Content-Encoding"];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html",@"text/json",@"text/javascript",@"text/plain",nil];
NSMutableDictionary *dict =[NSMutableDictionarydictionary];
[dictsetValue:@"sp_tab_user_login"forKey:@"call_name"];
NSMutableDictionary *dataDict =[NSMutableDictionarydictionary];
[dataDict setValue:@"1"forKey:@"type"];
[dataDictsetValue:@"18983766960"forKey:@"phone_no"];
[dataDict setValue:@"123456"forKey:@"passwd"];
//这里有可能dataDict要转成String
[dict setValue:dataDictforKey:@"data"];
NSLog(@"参数json字典 %@",dict);
//转成NSData
NSData *jsonData = [NSJSONSerializationdataWithJSONObject:dict options:0error:nil];
//转成String
NSString *jsonStr =[[NSStringalloc]initWithData:jsonDataencoding:NSUTF8StringEncoding ];
NSLog(@"参数json字符串%@",jsonStr);
NSString *baseUrl =@"http://180.76.248.109/YWZ/ywz2/sp_ywz2_back_interface";
NSString *urlStr =[NSStringstringWithFormat:@"%@?inParameter=%@",baseUrl,jsonStr];
NSLog(@"请求的urlStr %@",urlStr);
//执行get请求
[manager GET:urlStrparameters:nilprogress:nilsuccess:^(NSURLSessionDataTask *_Nonnull task, id _Nullable responseObject) {
// NSLog(@"reponse===> %@",responseObject);
NSJSONSerialization *json =[NSJSONSerializationJSONObjectWithData:(NSData *)responseObjectoptions:0error:nil];
NSLog(@"json %@",json)
} failure:^(NSURLSessionDataTask *_Nullable task, NSError *_Nonnull error) {
NSLog(@"error %@",error);
}];
请求发出去后总是失败 报错是这样的
2017-09-02 21:59:52.240921+0800 DDU[2859:741150] *** Assertion failure in -[AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:], /Users/danny/Desktop/DDUWorkingCopySep01/DDUAug17BackUp/SVNBackUpJune12backup/DDU/DDU/Class/Library/AFNetworking/AFNetworking/AFURLRequestSerialization.m:353
很绝望 然后我说我用苹果自己的NSURLSession试一下吧 然后结果是url格式不支持
Printing description of error:
Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSLocalizedDescription=unsupported URL, NSUnderlyingError=0x600000649870 {Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"}}
其实我大概想到是什么问题 应该是字符编码的问题 因为输出url放到浏览器是没问题的 而AFN的断言却告诉我这个url是nil,然后我谷歌了一下 发现 只是加了一行代码就完美解决了
NSString *str1 = [urlStrstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLQueryAllowedCharacterSet]];
我觉得应该是我们手动拼接的url 有可能是不是utf8的 二浏览器就比较智能
NSString *str1 = [urlStrstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLQueryAllowedCharacterSet]];
Returns a new string made from the receiver by replacing all characters not in the specified set with percent encoded characters.
Entire URL strings cannot be percent-encoded, because each URL component specifies a different set of allowed characters. For example, the query component of a URL allows the “@
” character, but that character must be percent encoded in the password component.
UTF-8 encoding is used to determine the correct percent encoded characters. Any characters in allowedCharacters
outside of the 7-bit ASCII range are ignored.
到此为止 bug完美的修复了
- AFN请求的一个坑
- AFN请求的 数据传递
- iOS中使用AFN的delete请求遇到的坑
- AFN做post请求,参数为数组的坑
- 如何打印请求的AFN请求的json串。
- AFN网络请求打印请求失败的错误
- AFN的坑--NSCachedURLResponse缓存
- AFN同步异步请求
- AFN之数据请求
- AFN请求常用部分
- 封装AFN请求
- AFN框架https请求
- AFN 设置请求数据类型
- AFN同步异步请求
- Network 【HTTPS请求/AFN】
- AFN同步异步请求
- AFN 添加请求头
- AFN请求超时时间
- 设置div高度为100%
- Java中的ReentrantLock和synchronized两种锁定机制的对比
- tostring,string强转,string。valueof()区别
- 【Linux学习笔记】28:位置参数变量
- Codeforces Round #431 (Div. 2) D. Rooter's Song
- AFN请求的一个坑
- shell脚本在容器云中搭建hadoop集群(一)
- 省市联动
- caffe下用python进行mnist预测
- 如何快速学习
- 自己搭建自动化巡检系统(五) 抖动告警
- js的常用String对象
- MySQL常见问题汇总
- RF框架简介小结