我已经使用了很多次GET。但在目前的情况下,我必须使用POST方法使用webService。我已经完成了许多教程但无法做到。 路径为“http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn”,参数为“id”,“传递”用于测试的电子邮件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块这就是为什么它打印“msg =服务器遇到错误”
答案 0 :(得分:1)
我想详细说明我的评论,并可能提供一些提示,以便如何跟踪Web服务和API的可能问题。
确保Web服务按预期工作。您不需要Xcode - 而是一个非常宝贵的命令行工具curl
。 curl
功能强大 - 它允许您在命令行上以非常简洁的方式执行HTTP请求,尽管它提供的许多选项可能看起来令人困惑。
(如果您需要有关卷曲的具体帮助,请参阅手册页和网页。)
所以,让我们尝试curl,启动你的终端应用程序,然后输入一个简单的GET命令来测试curl是否正常工作:
$ curl -X GET http://example.com
curl应该从控制台上的www.example.com返回一个http页面。
要获得curl的帮助,请打开手册页:
$ man 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规则,我们真的应该,只是意味着:DO发送内容类型!
适当的Content-Type是“application / json” - 正如在命令中指定的那样。
当您的服务正常运行时,它应该返回“某事”。我们甚至可以告诉我们首选的响应数据,比如说我们想要一个JSON的响应体。要告诉服务器,请包含适当的标头:
“接受:application / 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
对象,如下所示:
如上所述设置标题“Content-Type”和“Accept”。为HTTPBody
属性分配JSON数据(UTF-8编码)。设置URL和方法“POST”。
开始连接。
最后一步取决于。您可以使用NSURLConnection
中的方便方法,例如sendAsynchronousRequest:queue:completionHandler:
- 或使用委托方法,或使用第三方库等。