2011-03-18 23 views
0

私はこのCytamobile-Vodafone webserviceを使ってログインするアプリを開発しようとしています。ASIHTTPリクエスト問題

私が使用しているHTTPライブヘッダーのアドオンはMozillaで取得するには、この1: %3D & HeaderLogin1%24CybeeUserName1%24txtUserName = mavris & HeaderLogin1%24CybeePassword1%24txtPassword = XXXXX & HeaderLogin1%24ibtnLogin.x = 20 & HeaderLogin1% 24ibtnLogin.y = 4 HTTP/1.1 302 Found

最初に、ログインしようとするたびにibtnLogin.xとibtnLogin.yが同じ値ではないことに気付きました。

第二に、私はこのコードを書いた:

-(IBAction) buttonpressed { 

    NSURL *url = [NSURL URLWithString:@"https://www.cytamobile-vodafone.com/miPortal/HeaderLoginBar.aspx"]; 

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
    [request setPostValue:@"xxxxxx" forKey:@"txtUserName"]; 
    [request setPostValue:@"xxxxxx" forKey:@"txtPassword"]; 
    [request setPostValue:@"31" forKey:@"ibtnLogin.x"]; 
    [request setPostValue:@"7" forKey:@"ibtnLogin.y"]; 
    [request setDelegate:self]; 
    [request startAsynchronous]; 
    [self requestFinished:request]; 

} 

- (void)requestFinished:(ASIFormDataRequest *)request 
{ 
    // Use when fetching text data 

    NSString *responseString = [request responseStatusMessage]; 

    NSLog(@"Output = %@",responseString); 
} 

をし、私が取得:

"Output = HTTP/1.1 200 OK" instead of 302 Found or any other error 

私はここで間違って何をしているのですか?あなたの問題の

答えて

1

少なくとも一つはstartAsynchronousメソッドは非同期要求を開始し[self requestFinished:request];

[request startAsynchronous];後に、それは別のスレッドで要求を実行し、それはだときにお知らせしますので、あなたのコードは、呼び出すべきではないということです完了しました。

リクエストが完了すると、ASIHTTPRequestコードはrequestFinished:メソッドを呼び出します。要求が失敗すると、代わりにrequestFailed:が呼び出されます。 これらのメソッドを呼び出さないでください、ASIHTTPRequestコードは行います。 ASIHTTPRequest docsをチェックしてください。

これはObjective-Cでよく見られる標準的なデリゲートパターンです(hereはSOのここでの委任についての多くの質問の1つです)。

関連する問題