2

我有一个附加访问代码的 Web 服务 URL。我需要将访问代码发布到 Web 服务 URL 并获得 json 响应。我收到了带有正确访问码和不正确访问码的 json 响应。我没有得到问题出现的地方。当输入错误的密码时,我需要显示警报。

这是我的代码:

  NSString *post =[[NSString alloc] initWithFormat:@"txtsecurecode=%@",[txtsecurecode text]];
        NSLog(@"PostData: %@",post);
        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
        NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
        NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];

      [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://my example.com/Accountservice/Security/ValidateAccess?accesscode=abcdtype=1"]]];

        NSURL *url;

  // I need to parse it into url here .  

        [request setHTTPMethod:@"POST"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [request setHTTPBody:postData];
        NSURLConnection *conn= [[NSURLConnection alloc] initWithRequest:request delegate:self];
        if(conn)
        {
            NSLog(@"Connection Successful");
        }
        else
        {
            NSLog(@"Connection could not be made");
        }

    NSString *responseData = [[NSString alloc]initWithData:[NSData dataWithContentsOfURL:url] encoding:NSUTF8StringEncoding];

如果我输入错误的密码,我会登录失败,没关系。当我更正密码时,它不会显示该 URL 的内容。我们需要将请求解析为 URL。

4

1 回答 1

10

在你的情况下

 NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://my example.com/Accountservice/Security/ValidateAccess?accesscode=abcd&type=1"]];

您不能使用诸如此类的方法传递参数,URL in POST
....?accesscode=abcd&type=1"

您可以使用以下代码片段,如本文所述

在这里,我简单描述一下如何使用 POST 方法。

1.使用实际用户名和密码设置帖子字符串。

NSString *post = [NSString stringWithFormat:@"&Username=%@&Password=%@",@"username",@"password"];

2.NSASCIIStringEncoding使用以及您需要以 NSData 格式发送的帖子字符串对帖子字符串进行编码。

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

您需要发送数据的实际长度。计算帖子字符串的长度。

NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];

3.创建一个包含所有属性的 Urlrequest,如HTTP方法、http 标头字段以及 post 字符串的长度。创建URLRequest 对象并初始化它。

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];

设置要向该请求发送数据的 URL。

[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.abcde.com/xyz/login.aspx"]]];

现在,设置HTTP方法(POST 或 GET)。像在您的代码中一样编写此行。

[request setHTTPMethod:@"POST"];

HTTP使用发布数据的长度设置标题字段。

[request setValue:postLength forHTTPHeaderField:@"Content-Length"];

还要设置 HTTP 标头字段的编码值。

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];

使用 postData设置HTTPBodyurlrequest 的。

[request setHTTPBody:postData];

4.现在,创建 URLConnection 对象。使用 URLRequest 对其进行初始化。

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];

它返回初始化的 url 连接并开始为 url 请求加载数据。您可以使用下面的if/else语句检查您URL的连接是否正确完成。

if(conn)
{
NSLog(@”Connection Successful”)
}
else
{
NSLog(@”Connection could not be made”);
}

5.要接收来自 HTTP 请求的数据,您可以使用 URLConnection 类参考提供的委托方法。委托方法如下。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data

上述方法用于接收我们使用 post 方法获取的数据。

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

此方法,您可以在未与服务器建立连接的情况下接收错误报告。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

上述方法用于连接成功后的数据处理。

另请参阅 文档以了解POST方法。

这是HTTPPost 方法源代码的最佳示例。

于 2013-03-13T04:43:05.980 回答