bar*_*dog 8 objective-c ios afnetworking-2
如何使用URL中的所有参数发送POST带有AFNetworking2.0 的请求,如下所示:
http://www.myserver.com?api_key=something&lat=2.4&radius=100
现在我有:
NSString* query = @"http://example.com?name=param&date=param";
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{};
[manager POST:query parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Run Code Online (Sandbox Code Playgroud)
但它没有用,我得到了这个错误:
Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: bad request (400)
bol*_*nad 22
之前的最佳答案是让后端更改并接受正文中的参数.这是首选的方法,但有时我们中的一些人使用后端无法改变,所以我提供这个解决方案....
在类AFURLRequestSerialization有一个叫做HTTPMethodsEncodingParametersInURI特性,那就是都包含了允许使用PARAMS URI中的HTTP方法的NSSet中GET,HEAD和DELETE默认.
您可以覆盖它并包含POST.
在AFURLRequestSerialization.m中,第462行有一个if语句,用于检查self.HTTPMethodsEncodingParametersInURI属性是否包含POST.如果没有(因为它没有默认),它会将参数放在正文中.
您可以注释掉该id语句以进行快速测试.
为了使它工作,我建议覆盖HTTPMethodsEncodingParametersInURI属性.
在设置AFHTTPSessionManager时它应该如下所示......
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:self.httpBaseUrl]];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithArray:@[@"POST", @"GET", @"HEAD", whatever other http methods you need here....]];
Run Code Online (Sandbox Code Playgroud)
这应该允许在POST的uri中发送参数.为我工作,希望它能帮助别人
#import "AFNetworking.h"
...
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *params = @{@"param1": value1,
@"param2": value};
manager.responseSerializer = [AFJSONResponseSerializer serializer]; // if response JSON format
[manager POST:@"http://domain.com/backend.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}];
Run Code Online (Sandbox Code Playgroud)
尝试这个
| 归档时间: |
|
| 查看次数: |
14692 次 |
| 最近记录: |