0
我試圖從一些服務器API調用現在從http切換到https,我遇到了一個問題,我無法向自己解釋。NSURLConnection sendAsynchronousRequest:長時間運行在https
從http切換到https後,我正在經歷我的異步請求需要60秒完成,儘管服務器已經處理了請求。
沒有錯誤被拋出,沒有超時發生或類似的事情,似乎需要60秒才能注意到請求已完成。然後,在60秒後,它完成了它的目的。
這是我在做什麼:
NSString *theBody = @"param1=value1¶m2=value2";
NSData *bodyData = [theBody dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSURL *url = [NSURL URLWithString:@"https://my.api.server.com/call"];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease];
[request setValue:@"My User-Agent" forHTTPHeaderField:@"User-Agent"];
// Tested this one, too. Yes, I did set to utf8 encoding when trying this
// [request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:bodyData];
// testing only
// [request setTimeoutInterval:15];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSLog(@"Finished!");
}];
日誌信息是60秒後拋出。在日誌消息發佈之前刷新相應的數據時,我可以看到所有事情都已經發生 - 我可以正確地刷新刷新的數據。
我已經認爲這是我的服務器花了這麼長時間來回答,但我已經嘗試使用Ruby作爲快速測試運行的相同請求,並且它正常工作。
有誰知道這裏會發生什麼?
在此先感謝
阿恩
當您發佈到其他服務器時發生了什麼?只是爲了測試?在https上發佈到谷歌...或許我會猜你的服務器有故障 – 2012-04-15 18:22:13
你可能是對的。但是有一個有趣的事實:當請求不成功時,它會起作用。那麼,至少它不需要60秒,但立即返回。 我在我的服務器上返回一個JSON響應。如果調用成功,則返回對象的代碼201(實體創建正確)和JSON。如果不成功,它將返回錯誤消息代碼4xx和JSON。錯誤立即生效,成功需要NSURLConnection花費60秒才能完成 - 但在此持續時間後它會正確完成。 – arnekolja 2012-04-15 18:36:04
我剛剛嘗試使用代表團,而不是再次阻止,現在我得到了這個工作。但是這可能怎麼樣? 201不會被識別爲響應代碼是iOS 5.1中的一個錯誤嗎?無法解釋它...有什麼想法? – arnekolja 2012-04-15 19:25:49