2011-09-26 13 views
1

HTTPポスト接続内で接続タイムアウト(20秒と言う)を実装する最良の方法は何ですか?HTTP POSTでタイムアウトを実装する

次のように私の現在のコードは次のとおりです。

-(NSData*) postData: (NSString*) strData 
{  
    //postString is the STRING TO BE POSTED 
    NSString *postString; 

    //this is the string to send 
    postString = @"data="; 
    postString = [postString stringByAppendingString:strData]; 

    NSURL *url = [NSURL URLWithString:@"MYSERVERHERE"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
    NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]]; 

    //setting prarameters of the POST connection 
    [request setHTTPMethod:@"POST"]; 
    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request addValue:msgLength forHTTPHeaderField:@"Content-Length"]; 
    [request addValue:@"en-US" forHTTPHeaderField:@"Content-Language"]; 
    [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setTimeoutInterval:10.0]; 

    NSLog(@"%@",postString); 

    NSURLResponse *response; 
    NSError *error; 

    NSLog(@"Starting the send!"); 
    //this sends the information away. everybody wave! 
    NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSLog(@"Just finished receiving!"); 
    if (&error) //OR TIMEOUT 
    { 
     NSLog(@"ERROR!"); 
     NSString *errorString = [NSString stringWithFormat:@"ERROR"]; 
     urlData = [errorString dataUsingEncoding:NSUTF8StringEncoding]; 
    } 
    return urlData; 
} 

は明らかにタイムアウト間隔は10.0に設定されているが、何もそれらの10秒がヒット時に発生するようです。

+0

あなたは 'NSURLConnection'デリゲートメソッドを実装しましたか? –

+0

いいえ、私はしませんでした。 – Baub

+0

デリゲートメソッドを見ても、タイムアウトについてはわかりません。接続:didReceiveResponse :,接続:didReceiveData :,接続:didFailWithError:およびconnectionDidFinishLoading :. – Baub

答えて

1

参照してください:

NSMutableURLRequest timeout interval not taken into consideration for POST requests

はどうやら240の下の秒は無視されているタイムアウト。その質問の中で投票率が最も高い回答が解決策にリンクしています。しかし、代わりにASIHTTPRequestライブラリを使用することをお勧めします。

http://allseeing-i.com/ASIHTTPRequest/

+0

Appleのドキュメントを見て、サンプルコードではタイムアウトが60です。私はかなり混乱しています。 – Baub

関連する問題