3

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

    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 = 服务器遇到错误”的原因

4

1 回答 1

1

我想详细说明我的评论,并可能提供一些提示如何跟踪 Web 服务和 API 可能存在的问题。

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

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

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

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

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

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

$ man curl

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

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

{“id”:“shail.@gmail.com”,“通过”:“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 格式的响应正文。要告诉服务器,请包含适当的标头:

“接受:应用程序/json”

我们可以更具体地了解字符编码:

“接受:应用程序/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 并将其序列化为NSDataJSON(文本)的对象。

设置NSMutableRequest对象如下:

如上所述设置标题“Content-Type”和“Accept”。为属性分配HTTPBodyJSON 数据(采用 UTF-8 编码)。设置 URL 和方法“POST”。

开始连接。

最后一步取决于。你可以使用一个方便的方法NSURLConnection,比如说sendAsynchronousRequest:queue:completionHandler:- 或者使用委托方法,或者使用第三方库等。

于 2013-09-02T12:55:58.383 回答