我有一个附加了访问代码的Webservices URL。我需要将访问代码发布到webservices 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。你能帮我解决一下这个问题......
答案 0 :(得分: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"
您可以使用以下代码段,如in this article所述:
在这里,我简单描述了如何使用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。使用
HTTP
方法,http标题字段以及帖子字符串的长度等所有属性创建Urlrequest。创建URLRequest
反对并初始化它。NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
设置要将数据发送到该请求的网址。
[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设置urlrequest的
HTTPBody
。[request setHTTPBody:postData];
4. 现在,创建URLConnection对象。使用URLRequest初始化它。
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
它返回初始化的url连接并开始加载数据 对于网址请求。您可以检查是否
URL
连接 正确完成或不使用 if / else 语句,如下所示。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
上述方法用于在连接完成后处理数据 成功。
以下是源代码为HTTPPost Method.
的最佳示例