gpt4 book ai didi

ios - AFNetworking 2.0 发送带 URL 参数的 Post 请求

转载 作者:可可西里 更新时间:2023-11-01 03:03:46 24 4
gpt4 key购买 nike

如何使用 AFNetworking 2.0 发送一个 POST 请求,URL 中的所有参数如下:

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);
}];

但是它不起作用,我得到了这个错误:

Error Domain=AFNetworkingErrorDomain Code=-1011 “请求失败:错误请求 (400)”

最佳答案

之前的最佳答案是让后端更改并接受正文中的参数。这是首选方法,但有时我们中的一些人无法使用无法更改的后端,所以我提供了这个解决方案....

在 AFURLRequestSerialization 类中有一个名为 HTTPMethodsEncodingParametersInURI 的属性,它是一个 NSSet,其中包含允许在 uri GETHEAD 中使用参数的 http 方法,默认情况下为 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....]];

这应该允许在 POST 的 uri 中发送参数。为我工作,希望它能帮助别人

关于ios - AFNetworking 2.0 发送带 URL 参数的 Post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20794573/

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