2013-03-13 49 views
2

我有一個附帶有accesscode的Webservices URL。我需要將訪問碼發佈到webservices url並獲得json響應。我正在使用正確的訪問碼和錯誤的訪問碼來獲取json響應。我沒有得到問題出現的地方。我需要在錯誤的密碼進入,這裏是我的代碼顯示警報..從webservices url獲取密碼並通過該密碼進行訪問

NSString *post =[[NSString alloc] initWithFormat:@"txtsecurecode=%@",[txtsecurecode text]]; 
     NSLog(@"PostData: %@",post); 
     NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
     NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 
     NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 

     [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://my example.com/Accountservice/Security/ValidateAccess?accesscode=abcdtype=1"]]]; 

     NSURL *url; 

    // I need to parse it into url here . 

     [request setHTTPMethod:@"POST"]; 
     [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
     [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
     [request setHTTPBody:postData]; 
     NSURLConnection *conn= [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
     if(conn) 
     { 
      NSLog(@"Connection Successful"); 
     } 
     else 
     { 
      NSLog(@"Connection could not be made"); 
     } 

    NSString *responseData = [[NSString alloc]initWithData:[NSData dataWithContentsOfURL:url] encoding:NSUTF8StringEncoding]; 

,如果我給錯了密碼,我得到登錄失敗,多數民衆贊成罰款。當我更正密碼時,它不顯示該網址的內容。我們需要將請求解析爲url。你能幫助我如何解決這一問題?

回答

10

你的情況

NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://my example.com/Accountservice/Security/ValidateAccess?accesscode=abcd&type=1"]]; 

你不可錯過參數URL in POST方法,例如像,
....?accesscode=abcd&type=1"

你可以使用以下代碼片段,如所述in this article

在這裏,我簡單介紹一下如何使用POST方法。

1.使用實際的用戶名和密碼設置過帳字符串。

NSString *post = [NSString stringWithFormat:@"&Username=%@&Password=%@",@"username",@"password"]; 

2.編碼使用NSASCIIStringEncoding後的字符串,你也需要在NSData的格式發送後的字符串。

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

您需要發送數據的實際長度。計算帖子字符串的長度 。

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

3.與像HTTP方法,與柱的字符串的長度的HTTP報頭字段中的所有屬性創建的URLRequest。創建URLRequest 對象並初始化它。

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 

設置您要將數據發送到該請求的Url。

[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.abcde.com/xyz/login.aspx"]]]; 

現在,設置HTTP方法(POST或GET)。請將此行寫入 您的代碼。

[request setHTTPMethod:@"POST"]; 

設置HTTP標題字段與帖子數據的長度。

[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 

還設置HTTP頭字段的編碼值。

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"]; 

使用postData設置urlrequest的HTTPBody。現在

[request setHTTPBody:postData]; 

4.,創建URLConnection對象。使用URLRequest對其進行初始化。

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 

它返回初始化URL連接,並開始裝入數據 的URL請求。您可以檢查是否URL連接 正確完成或不使用if/else聲明如下。

if(conn) 
{ 
NSLog(@」Connection Successful」) 
} 
else 
{ 
NSLog(@」Connection could not be made」); 
} 

5.從HTTP請求接收數據,則可以使用由URLConnection類參考提供的委託方法。 代表方法如下。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data 

以上方法用於接收我們開始使用後 方法的數據。

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 

這種方法,可以用來接收 連接的情況下,錯誤報告是不是服務器發出。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

上述方法被用來處理所述數據連接已取得 後成功。

也參照ThisThis文檔POST方法。

這裏是HTTPPost Method.

+0

@patel的源代碼最好的例子,我更新了我的代碼,如你所說,我還是我的應用程序日誌記錄wrng密碼。爲了設置網址,我沒有像你說的那樣使用,因爲我得到一個新的url作爲json響應。我用你的代碼更新了我的問題。你可以看到我的代碼中的最後一條語句,我如何使用url。等待回覆。 – 2013-03-13 06:34:32

+0

...?accesscode = abcdtype = 1您不能在Post方法中將它傳遞到我的答案中。 – iPatel 2013-03-13 10:26:25