2010-11-07 6 views
7

Làm thế nào tôi sẽ đi về sao chép này trong Objective-CObjective-c xác thực HTTP Basic

curl -u [email protected]:mypassword http://foo.lighthouseapp.com/projects.xml 

Tôi đã chơi đùa với các thư viện ASIHTTPRequest nhưng dường như không thể hình dung nó ra,

rõ ràng gửi yêu cầu của tôi như vậy trả về một lỗi xác thực:

-(void)submit:(id)sender { 
    NSURL *url = [NSURL URLWithString:@"http://ldn.lighthouseapp.com/projects/63254-londonist-20/tickets.xml"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request startSynchronous]; 
    NSError *error = [request error]; 
    if (!error) { 
     NSString *response = [request responseString]; 
     NSLog(@"response:%@",response); 
    } else { 
     NSLog(@"error:%@",error); 
    } 
} 

Đây có lẽ là rất đơn giản tôi chỉ còn thiếu một cái gì đó khá lớn

Trả lời

12

From ASIHTTPRequest Documentation

With a Request Header

[request addRequestHeader:@"Authorization" 
        value:[NSString stringWithFormat:@"Basic %@", 
          [ASIHTTPRequest base64forData: 
          [[NSString stringWithFormat:@"%@:%@", theUsername, thePassword] 
          dataUsingEncoding:NSUTF8StringEncoding]]]]; 
+0

Cảm ơn nó thực sự đã giúp tôi – mohitum

0

Nếu bạn đang sử dụng ASIHTTPRequest, đây là tất cả những gì cần thiết:

request.shouldPresentCredentialsBeforeChallenge = YES; 
[request addBasicAuthenticationHeaderWithUsername:@"USER" andPassword:@"PASSWORD"]; 
2

Nếu không muốn sử dụng bất kỳ khuôn khổ (như tôi), bạn có thể thực hiện theo cách tiếp theo:

NSURL *url = [NSURL URLWithString: @"https://api.github.com"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

[request setHTTPMethod:@"GET"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

NSString *authStr = [NSString stringWithFormat:@"%@:%@", login, password]; 
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding]; 
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodedStringWithOptions:0]]; 
[request setValue:authValue forHTTPHeaderField:@"Authorization"]; 

NSURLSession *session = [NSURLSession sharedSession]; 
[[session dataTaskWithRequest:request 
     completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 
      if (!error) { 
       NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
       NSLog(@"%@",responseDictionary); 
      } 
     }] resume];