2009-07-06 30 views
2

我正在開發一個應用程序,該應用程序連接到遠程Web服務器並經常與Web服務器交換數據。我的應用程序的第一個屏幕提供了驗證用戶的登錄屏幕。如何從發送的請求中檢索服務器的響應

我能夠通過向服務器發送請求來驗證Web服務器上的用戶,但無法從服務器獲得響應以向iPhone上的用戶顯示成功警報。很明顯,我沒有得到任何迴應。

我使用的服務器是用JAVA開發的。

我正在使用以下命令將請求發送到服務器。

NSString *post = @"username="; 

post = [post stringByAppendingString:username]; 
post = [post stringByAppendingString:@"&password="]; 
post = [post stringByAppendingString:password]; 

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:@"http://mysite.com/login.action?"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setHTTPBody:postData]; 
NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

而且,

- (void)connectionNSURLConnection *)connection didReceiveDataNSData *)data 
{ 
[receivedData appendData:data]; 
NSString *ReturnStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
NSLog(@"In \"didReceiveData()\" : receivedData = %@",receivedData); 
NSLog(@"Return String : %@", ReturnStr); 

} 

此功能不會被調用。

我該如何接收我發送的請求的回覆?

我查詢的簡單集合: 例如:登錄屏幕,驗證在Java服務器用戶

  1. 我發送請求我能夠看到我的服務器應用程序的控制檯。
  2. 我無法獲得請求的回覆。
  3. 響應數據必須以何種格式發送?

誰能幫助我獲得通過指導我的iPhone應用程序和一個Java servlet之間的數據交換的清晰畫面完成這件事..

任何形式的幫助深表感謝..

在此先感謝.. Venkat


感謝ü您的快速反應傢伙..我還實施了這三種方法。但沒有來自服務器的迴應。你能指導我開發通過請求和響應與JAVA服務器通信的LOGIN應用程序嗎?我堅持溝通。

是的,我的服務器正在接收來自iphone的請求。我能夠看到發送到服務器的請求。

我無法理解iphone應用程序和JAVA服務器之間的數據交換是如何發生的。我是這個iphone開發的新手。

回答

0

你應該驗證服務器實際上是從iphone接收請求。 一個簡單的PHP腳本應該返回一些東西。

<?php 

    echo print_r($_GET, true); 
    echo print_r($_POST, true); 
?> 

創建一個虛擬應用程序,使該腳本的請求,並顯示響應

1
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [responseData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [responseData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    NSString *failureMessage = [NSString stringWithFormat:@"Connection failed: %@", [error description]]; 
    NSLog(failureMessage); 

} 

嘗試實現這三種方法爲好,你可能會得到一個錯誤或沒有反應。你可以通過使用這些方法來判斷。

+0

謝謝你們的快速回復。 我也實施了這三種方法。但沒有來自服務器的迴應。 您可以指導我開發LOGIN應用程序的過程,該應用程序通過請求和響應與JAVA服務器進行通信? 我堅持溝通。 – Venkat 2009-07-06 06:32:44

+0

@Venkat:在上面的代碼中,你發佈了你的問題,其中你使用NSURLConnection * conn;你沒有收到任何警告「未使用變量」conn'「? – 2012-03-21 07:01:48

0

我不知道你指的是與LOGIN什麼身份驗證,但如果服務器要求HTTP認證,你需要實現委託方法

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 
0

我使用下面的發送請求到服務器。

該代碼看起來不錯,但代碼在哪裏,以及您向我們顯示的代碼前後發生了什麼?它是否處於按鈕按下的處理程序中?它是否在後臺線程中?

對於您用於正常工作的異步加載,您需要在默認運行循環的線程上,例如,主線程。而且這段代碼必須將控制權交還給運行循環,即不得忙於等待其他事情。

另一件要檢查的是你的服務器 - 它實際上是發送一個響應?如果您從瀏覽器發送相同的請求,您會收回哪些內容?

編輯:它可能會幫助,如果你也顯示在服務器端的Java動作處理程序。例如,如果登錄成功,它會發送HTTP重定向嗎?並且您是否實施以下代理方法:

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse 

...如果是,那麼該方法是什麼樣子。我想知道你是否可能實現了這個方法,但沒有在那裏得到正確的邏輯,從而阻止了重定向的發生。

0

U可以這樣來做...

-(NSString*)createWebServiveRequest:(NSString *)urlLink{ 
    NSURL *url = [NSURL URLWithString:urlLink]; 
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:60]; 
    NSData *returnData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse: nil error: nil ]; 
    NSString *responseString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
    return responseString; 
} 

調用上述方法包含URL的NSString .....和捕捉它的方法調用。

相關問題