-
Notifications
You must be signed in to change notification settings - Fork 0
iOS网络请求
Deepin edited this page Apr 25, 2021
·
7 revisions
iOS网络请求
参数传递方式(Parameter Type)有三种
- query
- Header
- Body
query类型,一般指的是将参数以
字符串
的格式,拼接到请求的url后面;
结构如下: http://www.site.com/path?parameterName01=parameterValue01¶meterName02=parameterValue02
在网络请求的完整url (包括协议+域名/地址:端口号+完整路径)后面,拼接一个问号:?,然后对于参数是以 key=value的形式拼接,若是有多个参数则用符号: & 连接起来
Header类型,一般是指将参数,如token放到请求头里面,格式一般是keyValue类型的
键值对
,或者字典形式,具体以实际情况为准;
iOS通常如下设置:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager.requestSerializer setValue:@"token值" forHTTPHeaderField:@"access_token"];
其中access_token指token的key,一般是这个,以实际情况后台的要求为准;
Body类型,一般是指将参数,放到请求体里面,的keyValue类型的键值对,或者字典类型, 具体以实际情况为准; 对于body类型,需要设置Content-Type的值,一般又分为以下几种类型
- application/json
- application/x-www-form-urlencoded
- multipart/form-data
参数的格式(json类型):{"key01":"value01","key02":"value02"}
需要设置:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
参数的格式:key=1&value=2
参数的格式:key=1&value=2
+ (void)post:(NSString *)urlString
parameters:(NSDictionary *)parameters
success:(void (^)(id responseObject))success
failure:(void (^)(NSString *errorMessage))failure {
/// 链接处理
NSString *url = [NSString stringWithFormat:@"%@%@",baseUrl, urlString];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager POST:url
parameters:parameters
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/// 可以用如下的方式输出请求的信息,都在task中;
/// 其中task.originalRequest与currentRequest在url没有被重定向的情况下就和originalRequest相同,
/// 如果被重定向了,那么内容就是不一样的。会有出现currentRequest的HTTPBody无内容的情况,一般用originalRequest即可
NSLog(@"Request Success-->[URL]:%@ [HTTPMethod]:%@ [allHTTPHeaderFields]:%@ [HTTPBody]:%@ [task.response]:%@",
task.originalRequest.URL,
task.originalRequest.HTTPMethod,
task.originalRequest.allHTTPHeaderFields,
[[NSString alloc]initWithData:task.originalRequest.HTTPBody encoding:NSUTF8StringEncoding],
task.response);
/// 此处写成功的回调的处理代码
```
///
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Request Failure-->[URL]:%@ [HTTPMethod]:%@ [allHTTPHeaderFields]:%@ [HTTPBody]:%@ [task.response]:%@",
task.originalRequest.URL,
task.originalRequest.HTTPMethod,
task.originalRequest.allHTTPHeaderFields,
[[NSString alloc]initWithData:task.originalRequest.HTTPBody encoding:NSUTF8StringEncoding],
task.response);
NSLog(error.localizedDescription);
failure(error.localizedDescription);
}];
}