Ios AF2.0网络可以';t发送到DJANGO(接收到消息)
我在尝试从iOS设备与Django API通信并发布NSDictionary时遇到了最奇怪的问题,但似乎无法使其正常工作。 奇怪的是:同样的代码就像一个魔咒,与RubyAPI对话 这是我的ObjC方法:Ios AF2.0网络可以';t发送到DJANGO(接收到消息),ios,objective-c,django,afnetworking-2,Ios,Objective C,Django,Afnetworking 2,我在尝试从iOS设备与Django API通信并发布NSDictionary时遇到了最奇怪的问题,但似乎无法使其正常工作。 奇怪的是:同样的代码就像一个魔咒,与RubyAPI对话 这是我的ObjC方法: - (void)makePostToServerWithClass:(NSString *)stringClass object:(NSDictionary *)parametersDict success:(void (^)(AFHTTPRequestOperation *operation,
- (void)makePostToServerWithClass:(NSString *)stringClass object:(NSDictionary *)parametersDict success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
[[UIApplication sharedApplication]设置网络活动指示器可见:是]
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setRequestSerializer:[AFJSONRequestSerializer serializer]];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
__block NSError *errorMessage;
NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"POST" URLString:[baseURLString stringByAppendingString:stringClass] parameters:parametersDict error:&errorMessage];
[request setTimeoutInterval:120];
AFHTTPRequestOperation *operation = [manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
success(operation, responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", operation.responseString);
NSLog(@"ERROR2: %@", errorMessage.description);
NSLog(@"ERROR3: %@", error.description);
if(operation.responseObject)
errorMessage = [self creteErrorMessageForOperation:operation error:error];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
failure(operation, errorMessage);
}];
[manager.operationQueue addOperation:operation];
}
在该代码中,URLString将是:
@"http://linuxServerIP:8080/api/v1/create_user/"
参数DICT将是一个NSDictionary,包含:
(lldb)po参数DICT
{
“原始密码”=1234;
username=testuser;}
在Linux服务器上,Django调试打印:
[28/Mar/2014 13:04:29]“GET/api/v1/create_user/HTTP/1.1”4054
我在iOS上遇到的错误是:
错误3:错误域=NSCOCAERRORDOMAIN代码=3840“操作
无法完成。(Cocoa错误3840。)(JSON文本未启动
使用数组或对象,并选择允许不设置片段。)
UserInfo=0xb44e5b0{NSDebugDescription=JSON文本未以开头
数组或对象以及允许未设置片段的选项。,
NSUnderlyingError=0xb44e860“请求失败:不允许使用方法
(405)“}
最奇怪的是:我发送了一篇帖子,Linux服务器将错误打印为GET
你们知道我做错了什么吗?
正如我之前所说,它在Ruby API上运行良好。您应该从AFNetworking尝试此函数:-
(AFHTTPRequestOperation *)POST:(NSString *)URLString
parameters:(NSDictionary *)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
(AFHTTPRequestOperation*)POST:(NSString*)URLString
参数:(NSDictionary*)参数
带块构造体:(void(^)(id formData))块
成功:(void(^)(AFHTTPRequestOperation*操作,id responseObject))成功
失败:(void(^)(AFHTTPRequestOperation*操作,NSError*错误))失败
为了防止有人在任何时候遇到同样的问题,这个问题是因为我使用了一个名为RNCachingURLProtocol的POD来缓存从UIWebview检索到的图像和HTML页面。
由于某种原因,这个POD干扰了AFN网络,不允许它发出POST请求。
一旦我删除了RNCachingURLProtocol,一切都很顺利。我认为,如果这段代码在使用ruby的服务器上运行,而不是在使用django的服务器上运行,那么服务器实现就不好了。不幸的是,它不能正常工作。这就是该方法的结局:[manager POST:@“parameters:@{“username:@“userTest”,“password:@“123”}success:^(AFHTTPRequestOperation*operation,id responseObject){NSLog(@“success”);}failure:^(AFHTTPRequestOperation*operation,NSError*error){NSLog(@“FAILED:%@”,error.description);}];