1

認証が必要な当社のサイトの 1 つから JSON ページをフェッチしようとして問題が発生しています。

- http://xyz.com - 認証が必要です - http://xyz.com/jsonpage1
からデータを取得する必要があります - View DidLoad で、セッションを確立するためにログイン用のユーザーと pwd を送信します - 次に、ボタンがありますJSON を要求します。


このシーケンスは機能しません (つまり、セッションの読み込みコードが json の読み込みコードとは異なるルーチンにある場合)。ビュー didLoad のような同じルーチンに両方のコードがある場合、資格情報を認識して JSON を取得しているようです。変!私は何が欠けていますか?どのように機能するはずですか?セッションを確立するとCookieが1回作成され、再度気にする必要はないと思いましたか? ボタンをクリックすると、どういうわけか Cookie が失われますか?

-(void)viewDidLoad
{
  [self establishSession];
}

-(void)establishSession{   
//
//Login Session
//
NSURL *url = [NSURL URLWithString:@"http://xyz.com/login"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

NSString *post = [NSString stringWithFormat:@"username=%@&password=%@",@"abc",@"123"];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

[request setValue:[NSString stringWithFormat:@"%d",[postData length]] forHTTPHeaderField:@"Content-Length"];
[request setTimeoutInterval:15];
[request setHTTPBody:postData];
[request setHTTPMethod:@"POST"];

urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[urlConnection start];

}

- (IBAction)getJSON:(id)sender
{
 NSError *error = nil;

resultsView.text =@"";

[self establishLoginSession];   //I have to have this line here to get it to work ?????

//get JSON

NSURL *jurl = [NSURL URLWithString:@"http://xyz.com/jsonPage1"];

NSData *jdata = [NSData dataWithContentsOfURL:jurl options:NSDataReadingUncached error:&error];
NSDictionary* jsonDict = [NSJSONSerialization
                      JSONObjectWithData:jdata //1
                      options:kNilOptions
                      error:&error];

NSString *dataString = [[NSString alloc]initWithData:jdata encoding:NSUTF8StringEncoding];
resultsView.text = dataString;
} 


//Not sure if I need the cookie??
-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse  *)response
{

NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse*) response;
NSDictionary *fields = [HTTPResponse allHeaderFields];

if([fields valueForKey:@"Set-Cookie"])
   cookie = [fields valueForKey:@"Set-Cookie"];

}
4

1 に答える 1

0

オブジェクトに対して作成できるリクエストは 1 つだけなNSURLConnectionので、リクエストを行う直前に作成する必要があります。

于 2012-08-19T05:35:54.833 に答える