gpt4 book ai didi

ios - 如何使用 AFnetworking 或 NSJsonserialization 发布 json 数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:44 25 4
gpt4 key购买 nike

我已经多次使用 GET。但在目前的情况下,我必须使用 POST 方法使用 webService。我已经完成了许多教程,但无法完成。路径是“http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn”,参数是“id”和“pass”,用于测试的电子邮件ID是“shail@gmail.com”,密码是“shail”

    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn"]];
[httpClient setParameterEncoding:AFFormURLParameterEncoding];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn" parameters:@{@"id":@"shail@gmail.com",@"pass":@"shail"}];

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
self.movies = [JSON objectForKey:@"logInResult"];
NSLog(@"=========%@",self.movies);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);

}];
[operation start];

输出

=========(
{
msg = "Server encountered error";
}
)

服务器端人员说它进入了 catch block ,这就是它打印“msg= Server encountered error”的原因

最佳答案

我想详细说明我的评论,并可能提供一些提示,说明如何追踪网络服务和 API 可能出现的问题。

确保网络服务按预期工作。您不需要 Xcode - 但需要一个无价的命令行工具 curlcurl 功能强大 - 它允许您在命令行上以非常简洁的方式执行 HTTP 请求,尽管它提供的许多选项可能看起来令人困惑。

(如果您需要有关 curl 的具体帮助,请查阅手册页和网络)。

那么,让我们试试 curl,启动您的终端应用程序,然后输入一个简单的 GET 命令来测试 curl 是否正常工作:

$ curl -X GET http://example.com

curl 应该在控制台上从 www.example.com 返回一个 http 页面。

为了获得 curl 的帮助,请打开手册页:

$ man curl

您可以浏览内容。注意:curl 很复杂——并不复杂。不要不知所措 - 从基础开始:

来自您上面问题的以下 POST 请求比简单的 GET 更详细。我们想要 POST 一个 JSON.. 首先我们需要我们的 JSON:这是

{"id": "shail.@gmail.com", "pass": "shail"

现在在命令行中输入:

$ curl -X POST -H "Content-Type: application/json" -d '{"id": "shail.@gmail.com", "pass": "shail"}' "http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn"

注意:发送 JSON 时,我们应该将 Content-Type 告知服务器。那么根据 HTTP 规则,我们真的应该,简单的意思是:发送一个 Content-Type!

适当的 Content-Type 是“application/json”——因为它是在命令中指定的。

当您的服务正常工作时,它应该返回“某物”。我们甚至可以告诉我们首选的响应数据类型,比如说我们想要一个 JSON 格式的响应主体。要告知服务器,请包含适当的 header :

“接受:应用程序/json”

我们可以更具体地说明字符编码:

“接受:application/json;charset=utf-8”

你需要对语法挑剔!

现在,我们期望的是 UTF-8 格式的 JSON 响应

$ curl -X POST -H "Content-Type: application/json" -H "Accept: application/json; charset=utf-8" -d '{"id": "shail.@gmail.com", "pass": "shail"}' "http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn" 

响应可能会打印到控制台 - 但不是很漂亮。

这是一个解决方案:

$ <curl command> | python -m json.tool

更好:

$ curl -sSv <other commands>  | python -m json.tool

现在,我们使用强大的管道命令 (|) 调用第二个工具 (python),它启动一个 python 程序,该程序从 curl 获取输出并将 JSON 漂亮地打印到控制台。

现在,一旦您验证了 Web 服务正在运行,将 curl 命令映射到相应的 NSURLConnection 请求就不再简单了。

您应该使用 NSJSONSerialization 从字典创建 JSON 并将其序列化为 NSData 对象到 JSON(文本)。

设置一个 NSMutableRequest 对象如下:

如上所述设置 header “Content-Type”和“Accept”。为 HTTPBody 属性分配 JSON 数据(UTF-8 编码)。设置 URL 和方法“POST”。

开始连接。

最后一步取决于。您可以使用 NSURLConnection 中的便捷方法,比如 sendAsynchronousRequest:queue:completionHandler: - 或使用委托(delegate)方法,或使用第三方库等。

关于ios - 如何使用 AFnetworking 或 NSJsonserialization 发布 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18572479/

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