joh*_*doe 0 ios afnetworking-2
在AFNetworking的早期版本中,如果我必须创建自己的自定义客户端,那么我只需从AFHTTPClient继承并创建我的方法.在AFNetworking 2.0中,我相信我需要从AFHTTPSessionManager继承.
@interface MyCustomClient : AFHTTPSessionManager
{
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我需要发送请求作为肥皂.这意味着HTTP Body将是soap,HTTP HEADERS将是text/xml.
假设我有一个变量,其中包含我需要发送到服务器的整个肥皂体.
NSString *soapBody = @"Soap body";
Run Code Online (Sandbox Code Playgroud)
使用从AFHTTPSessionManager继承的上面定义的自定义类,如何将soap主体设置为Request HTTPBody.
如果无论如何都要从AFHTTPSessionManager内部访问NSURLRequest,那么我可以简单地做setHTTPBody,但似乎没有?
我希望我现在有意义!
你应该创建一个AFHTTPRequestSerializer的子类,然后实现协议AFURLRequestSerialization,这个类将关心添加正文和标题到请求
- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
withParameters:(id)parameters
error:(NSError * __autoreleasing *)error
{
NSParameterAssert(request);
if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) {
return [super requestBySerializingRequest:request withParameters:parameters error:error];
}
NSMutableURLRequest *mutableRequest = [request mutableCopy];
[self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) {
if (![request valueForHTTPHeaderField:field]) {
[mutableRequest setValue:value forHTTPHeaderField:field];
}
}];
[mutableRequest setValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[mutableRequest setHTTPBody:@"This is the soap Body!!"];
return mutableRequest;
}
Run Code Online (Sandbox Code Playgroud)
您可以阅读实现或其他AFHTTPRequestSerializer子类https://github.com/AFNetworking/AFNetworking/blob/master/AFNetworking/AFURLRequestSerialization.m#L1094
| 归档时间: |
|
| 查看次数: |
5099 次 |
| 最近记录: |