2016-02-23 80 views
0

我想在iOS中發送一個簡單的POST請求來測試我寫的服務器。我的代碼如下:使用NSURLSession的iOS POST請求

NSURL *url = [NSURL URLWithString:@"http://localhost:8888/createUser"]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
    NSString *bodyData = @"username=johndoe"; 
    request.HTTPMethod = @"POST"; 
    request.HTTPBody = [bodyData dataUsingEncoding:NSUTF8StringEncoding]; 
    request.timeoutInterval = 5; 
    [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
     NSLog(@"resp: %@, err: %@", response, error); 
    }]; 

我一直在試圖調試這個,我很困惑。 completionHandler中的代碼永遠不會運行,請求永遠不會超時,並且服務器永遠不會看到任何內容。似乎沒有任何事情發生。我能夠使用舊的NSURLConnection來請求一個請求,但是由於它已被棄用,我們希望避免這種情況。這裏有什麼問題?

+0

你是不是想發送POST或GET?您分享的代碼是使用GET – josemando

+0

我的錯誤 - 複製/粘貼錯誤後,我搞砸了。我正在嘗試發送POST。修正了我上面的代碼。 – user2871915

回答

0

除了設置你的代碼來做一個GET,當你說你想要做一個POST時(就像josemando在他的評論中指出的那樣),你並沒有開始你的任務。

你需要改變你的最後一行是這樣的:

NSURLSessionDataTask *task = [[NSURLSession sharedSession] 
    dataTaskWithRequest: request 
    completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error)  
    { 
    NSLog(@"resp: %@, err: %@", response, error); 
    }]; 
[task resume]; 

(dataTaskWithRequest創建並返回數據的任務對象,你就必須提交與恢復方法執行)

+0

謝謝。我改變了我的代碼,以反映這一點,但仍然沒有收到任何東西 - 如果請求發送完畢,我應該至少在5秒後得到一個超時,但這沒有發生。 – user2871915

+0

糟糕。我覺得自己像一個白癡,我正在通過設置斷點並逐步進行調試,並且執行被暫停,直到我繼續。這工作得很好。謝謝。 – user2871915