gpt4 book ai didi

iphone - AFNetworking - 如何发出 POST 请求

转载 作者:IT王子 更新时间:2023-10-29 08:11:21 25 4
gpt4 key购买 nike

编辑 07/14

正如 Bill Burgess 在对他的回答的评论中提到的,这个问题与 AFNetworking1.3 版 有关。对于这里的新人来说可能已经过时了。


我是 iPhone 开发的新手,我使用 AFNetworking 作为我的服务库。

我正在查询的 API 是一个 RESTful API,我需要发出 POST 请求。为此,我尝试使用以下代码:

NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:@"my_username", @"username", @"my_password", @"password", nil];
NSURL *url = [NSURL URLWithString:@"http://localhost:8080/login"];

NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"Pass Response = %@", JSON);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"Failed Response : %@", JSON);
}];
[operation start];

这段代码有两个主要问题:

  • AFJSONRequestOperation 似乎发出了一个 GET 请求,而不是一个 POST 请求。
  • 我不能给这个方法添加参数。

我也试过这段代码:

NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:@"my_username", @"username", @"my_password", @"password", nil];
NSURL *url = [NSURL URLWithString:@"http://localhost:8080"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

[httpClient postPath:@"/login" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Succes : %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure : %@", error);
}];

有没有更好的方法来完成我想在这里完成的事情?

感谢您的帮助!

最佳答案

您可以覆盖与 AFNetworking 一起使用的请求的默认行为,以作为 POST 处理。

NSURLRequest *request = [client requestWithMethod:@"POST" path:path parameters:nil];

这假设您已经覆盖了默认的 AFNetworking 设置以使用自定义客户端。如果你不是,我建议你这样做。只需创建一个自定义类来为您处理网络客户端。

MyAPIClient.h

#import <Foundation/Foundation.h>
#import "AFHTTPClient.h"

@interface MyAPIClient : AFHTTPClient

+(MyAPIClient *)sharedClient;

@end

MyAPIClient.m

@implementation MyAPIClient

+(MyAPIClient *)sharedClient {
static MyAPIClient *_sharedClient = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:webAddress]];
});
return _sharedClient;
}

-(id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (!self) {
return nil;
}
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
self.parameterEncoding = AFJSONParameterEncoding;

return self;

}

然后您应该能够毫无问题地在操作队列上触发您的网络调用。

    MyAPIClient *client = [MyAPIClient sharedClient];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
[[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];

NSString *path = [NSString stringWithFormat:@"myapipath/?value=%@", value];
NSURLRequest *request = [client requestWithMethod:@"POST" path:path parameters:nil];

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
// code for successful return goes here
[[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount];

// do something with return data
}failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
// code for failed request goes here
[[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount];

// do something on failure
}];

[operation start];

关于iphone - AFNetworking - 如何发出 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11294769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com