使用 AFNetworking 2.0 发送 POST 数据

Posted

技术标签:

【中文标题】使用 AFNetworking 2.0 发送 POST 数据【英文标题】:Sending POST data using AFNetworking 2.0 【发布时间】:2014-10-16 08:14:35 【问题描述】:

我正在尝试使用 AFNetworking 2.0 使用代码发送 POST 数据:

NSDictionary *loginParameters = @@"secretKey": @"SECRET_KEY", @"userOrEmail": username, @"password": password;

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

[manager POST:@"https://api.moj.io/v1/login/APP_ID" parameters:loginParameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
    NSLog(@"object is %@", responseObject);
failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Failure message is %@", [error localizedDescription]);
];

这一直给我一个回复说Request failed: not found (404)

但如果我使用 Postman REST 客户端(在 chrome 浏览器上),使用 URL https://api.moj.io/v1/login/APP_ID 以及 secretKey、userOrEmail 和密码的参数,它会给出正确的响应。

我犯了什么错误?

【问题讨论】:

【参考方案1】:

这个网址不正确?

https://api.moj.io/v1/login/APP_ID

将 APP_ID 替换为您的 app_id(也许您在这里显示示例代码?)

您正在测试的设备或模拟器也很可能无法访问互联网?您是否尝试在模拟器和设备上使用此 URL 浏览此站点?

我一直使用“Charles”,但您可以使用这个 HTTP 和 HTTPS 代理应用程序来监控来自 iPhone 模拟器的所有流量,这样您就可以实际查看应用程序是否正在发出这个 HTTPS 请求。我已经使用 Charles 多年了,它为我节省了很多时间。 http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

您的代码看起来不错,您也在对这个网址进行“POST”。与“获取”相比。 当您通过粘贴在浏览器地址栏中执行此操作时。你实际上是在做一个 GET。因此,请检查您的文档以确保您应该执行 POST 或 GET?

【讨论】:

【参考方案2】:

错误是 404 未找到,所以您这边出了点问题,您正在尝试访问在服务器上找不到的 Web 服务的特定部分。

如果没有原始 URL,没有人会告诉你你做错了什么。但在我看来,我可以说你应该检查一下,

    网址是否正确 确认您要访问的 API(服务) 仔细检查您传递的参数,如果是SECRET_KEYuserOrEmail。 如果您在 failure block 中得到此信息,那么前三点很可能会解决您的问题。

正如您所说,这在 POSTMAN 中运行良好,但在代码中却不行,那么您可以要求您的 API 开发人员返回您传递的所有内容,这样您就可以确保您的信息正确与否。

PS。几天前,我遇到了同样的问题,即 API 在 POSTMAN 和浏览器中运行良好,甚至在 iPhone 的 Safari 浏览器中也运行良好。但不是用代码。代码没有问题,然后我要求他们将我传递给他们的所有内容都返回给我,奇怪的是问题出在 API 内部,查询参数变成了空(是的,这很奇怪!)但这是我是怎么解决的。

【讨论】:

嘿,@Hemang 先生...拜托,你能解决这个问题吗...***.com/questions/37345790/…【参考方案3】:

这可能是框架中的一个错误,因为即使是示例代码也因域错误而失败:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) 
    NSLog(@"JSON: %@", responseObject);
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

错误:错误域=com.alamofire.error.serialization.response Code=-1011 “请求失败:未找到 (404)”

【讨论】:

如果您实际查看该 URL,则此资源不会返回 JSON 内容。返回的 HTTP 标头是(使用 charles): HTTP/1.1 404 Not Found Accept-Ranges: bytes Cache-Control: max-age=604800 Content-Type: text/html Date: Thu, 16 Oct 2014 09:40:45 GMT Etag:“359670651”到期:2014 年 10 月 23 日星期四 09:40:45 GMT 最后修改时间:2013 年 8 月 9 日星期五 23:54:35 GMT 服务器:ECS (rhv/8195) X-Cache:404-HIT x -ec-custom-error:1 内容长度:1270 我不太明白你的意思:(

以上是关于使用 AFNetworking 2.0 发送 POST 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AFNetworking 2.0 将包含字典的数组发送到服务器?

AFNetworking 2.0 将 [] 方括号添加到发送到服务器的 json

AFNetworking 2.0:凭据未在前一次请求的 30 秒内发送到身份验证

AFNetworking 2.0 发送带有字典参数数组的发布请求

使用 AFNetworking 2.0 加载图像

如何通过 AFNetWorking 2.0 将 JSON 格式的数据发送到 Web? [复制]