0

我正在尝试使用网站验证用户名和密码...

我正在使用这样的 ASIHttpRequest:

- (IBAction)fetchTopSecretInformation:(id)sender{
  Ustr = User.text;    //Ustr and Pstr are strings 
  Pstr  = Pass.text;

  NSURL *url1 = [NSURL URLWithString:[NSString stringWithFormat:@"https://www.MySite/login/"]];
  ASIFormDataRequest *request1 = [ASIFormDataRequest requestWithURL:url1];
  [request1 setUseKeychainPersistence:YES];
  request1.delegate = self;
  request1.shouldPresentCredentialsBeforeChallenge = YES;

  [request1 setRequestMethod:@"POST"];
  [request1 setPostValue:User.text forKey:@"username"];
  [request1 setPostValue:Pass.text forKey:@"passwd"];
  [request1 setTimeOutSeconds:30];
  NSLog(@"Useer :%@",User.text);

  [request1 setDidFailSelector:@selector(topSecretFetchFailed:)];
  [request1 setDidFinishSelector:@selector(topSecretFetchComplete:)];
  [request1 startAsynchronous];
}

- (IBAction)topSecretFetchFailed:(ASIHTTPRequest *)theRequest{
  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Error sending request to the server" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
  [alert show];
}

- (IBAction)topSecretFetchComplete:(ASIHTTPRequest *)theRequest{
  int statusCode = [theRequest responseStatusCode];
  NSString *statusMessage = [theRequest responseStatusMessage];

  NSString *strResponse = [[theRequest responseString] stringByTrimmingCharactersInSet:    [NSCharacterSet whitespaceAndNewlineCharacterSet]];
  NSString *strFinal = [self flattenHTML:strResponse];
  NSLog(@"Response :%@",strFinal);
  NSLog(@"StatusCode: %d", statusCode);
  NSLog(@"StatusMessage: %@", statusMessage);
}

我在 NSLog 中得到这样的响应:

jQuery(function($) { $(".main").addClass("show-bg"); });

JavaScript seems to be disabled in your browser.
You must have JavaScript enabled in your browser to utilize the functionality of this website.                

This is a demo store. Any orders placed through this store will not be honored or fulfilled.

                        +995 91 190601

            მოგესალმებით ელექტრონული წიგნების მაღაზიაში 

                        READERwill.com

    კალათა



                        კალათა GEL 0,00
                            სავაჭრო კალათა ცარიელია.

ჩემი ბიბლიოთეკა
სურვილები
რეგისტრაცია

.
.
.
.
.

和状态代码和状态消息是

状态码:200 状态
消息:HTTP/1.1 200 OK

这是什么响应以及如何使用它进行身份验证

在我的网络服务中,如果用户名和密码正确,则显示“成功”消息,否则显示失败消息...

4

3 回答 3

1

如果您正在为一个新项目工作,那么您不应该使用 ASIHTTP 框架。检查此链接中给出的说明http://allseeing-i.com/ASIHTTPRequest/它最后一次更新是在 2011 年。

只需尝试在 NSLog 中仅显示“strResponse”。我认为它应该正确显示响应。

于 2013-08-06T08:16:11.973 回答
0
- (IBAction)topSecretFetchComplete:(ASIHTTPRequest *)theRequest
{
    NSString *statusMessage = [theRequest  responseData];
    NSLog(@"StatusCode: %d", statusCode);
    //at this methods you get authuntication
    //write code  here
}
于 2013-08-06T08:05:38.583 回答
0

HTTP 200 响应代码是来自 Web 服务器的正常响应。如果您正在使用表单身份验证,正如您所看到的那样,我将检查响应中设置的 cookie,因为我希望在成功登录时返回会话 cookie。IIRC,ASIHTTPRequest 将默认存储 cookie 并自动将其与后续请求一起发送。

只要设置了 cookie 并且不发生其他错误情况(如 HTTP 401 或其他错误),您在响应中收到的内容可能并不重要,但这在很大程度上取决于您的情况。您可能需要解析错误响应,此时,服务器似乎正在嗅探您的请求的代理字符串并检测到您的客户端不支持 JavaScript,或者它期待类似于以 JSON 格式提交的表单格式作为 AJAX 调用的一部分,并假设由于该脚本失败,JavaScript 没有在您的浏览器中正常执行(它不是)。

现在,您正在向URL提交名为username和的字段。passwdhttps://www.MySite/login/

这似乎是网页的 URL,而不是 Web 服务。如果您在该 URL 的登录页面上查看登录表单,它是否有两个用于凭据的字段,并且它们使用名称或 IDusernamepasswd,例如:

<form action="https://www.MySite/login/" method="POST">
    <input name="username" type="text" />
    <input name="passwd" type="password" />
</form>

或者:

<form action="https://www.MySite/login/" method="POST">
    <input id="username" type="text" />
    <input id="passwd" type="password" />
</form>

否则,如果您使用的是通过 SOAP 或 JSON 进行通信的 Web 服务,您将需要以该格式而不是 URL 编码的表单数据来格式化您的身份验证请求。

于 2013-08-06T08:17:50.407 回答