我试图将我的代码转换为AFNetworking 2.0与分类AFHTTPRequestOperationManager.这是我的代码
@H_404_2@+ (NSAFNetwokingRequestManager *)sharedClient {
static NSAFNetwokingRequestManager *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:GET_CAR_BRAND]];
});
return _sharedClient;
}
- (instancetype)initWithBaseURL:(NSURL *)url
{
self = [super initWithBaseURL:url];
if (self) {
self.responseSerializer = [AFXMLParserResponseSerializer serializer];
self.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/soap+xml"];
self.requestSerializer = [AFHTTPRequestSerializer serializer];
[self.requestSerializer setValue:@"application/soap+xml" forHTTPHeaderField:@"Content-type"];
}
return self;
}
- (void)requestBrandcompletion:(NSAFNetwokingRequestManagerCompletionBlock)completion {
NSString *soapRequest=@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
"<soap:Body>\n"
" <CarBrandExt xmlns=\"http://www.nohausystems.nl/\" />\n"
"</soap:Body>\n"
"</soap:Envelope>\n";
NSString *msgLength = [NSString stringWithFormat:@"%i",[soapRequest length]];
[self POST:GET_CAR_BRAND parameters:Nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithHeaders:[NSDictionary dictionaryWithObjectsAndKeys:@"text/xml; charset=utf-8",@"Content-Type",msgLength,@"Content-Length",nil] body:[soapRequest dataUsingEncoding:NSUTF8StringEncoding]];
} success:^(AFHTTPRequestOperation *operation,id responSEObject) {
if (completion) {
completion(YES,responSEObject);
}
} failure:^(AFHTTPRequestOperation *operation,NSError *error) {
if (completion) {
completion(NO,nil);
NSLog(@"Unable to fetch record error %@ with user info %@.",error,error.userInfo);
}
}];
}
我收到这个错误Domain = AFNetworkingErrorDomain Code = -1011“请求失败:内部服务器错误(500).任何人可以告诉我我在这里做错了什么?
得到这个回应:
解决方法
你的代码有:
@H_404_2@[self POST:GET_CAR_BRAND parameters:Nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithHeaders:[NSDictionary dictionaryWithObjectsAndKeys:@"text/xml; charset=utf-8",nil] body:[soapRequest dataUsingEncoding:NSUTF8StringEncoding]];
它将content-type定义为“text / xml”,而服务器显然期待“application / soap xml”.您应该尝试将该部分代码更改为:
@H_404_2@[self POST:GET_CAR_BRAND parameters:Nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithHeaders:[NSDictionary dictionaryWithObjectsAndKeys:@"application/sopa+xml; charset=utf-8",nil] body:[soapRequest dataUsingEncoding:NSUTF8StringEncoding]];更新建议:
尝试添加:
@H_404_2@[self.requestSerializer setValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];在你的 – (instancetype)initWithBaseURL:(NSURL *)url方法的最后.
如果这没有帮助,我建议做一些更详细的网络请求调试.你可以设置AFNetworkActivityLogger将请求/响应信息记录到控制台.