3

このページ(http://www.sanmarinocard.sm)のソースコードを取得しようとしていますが、dataWithContentsOfURLがデータを取得しません。

NSURL *url = [NSURL URLWithString:@"http://www.sanmarinocard.sm"];
NSData *responseData = [NSData dataWithContentsOfURL:url];
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];

数日前まではすべて正常に機能していましたが、昨日以降は結果がありません。

手伝って頂けますか?ありがとうございました。

4

3 に答える 3

5

はい、それは私のためにも働いています。サーバーが一時的に利用できなくなった可能性があります。

dataWithContentsOfURL: を使用することはお勧めしません。これは同期的であり、アプリの動作をブロックするためです。サーバーが応答しない場合、アプリが長時間ブロックされる可能性があります。

推奨される方法は、NSMutableURLRequest を使用して非同期リクエストを送信することです。これにより、読み込み中もアプリの応答性を維持でき、タイムアウト間隔を設定してエラーをより簡単に処理できます。

NSURL *url = [NSURL URLWithString:@"http://www.sanmarinocard.sm"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setTimeoutInterval: 10.0]; // Will timeout after 10 seconds
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue currentQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

    if (data != nil && error == nil)
    {
        NSString *sourceHTML = [[NSString alloc] initWithData:data];
        // It worked, your source HTML is in sourceHTML
    }
    else
    {
        // There was an error, alert the user
    }

   }];
于 2013-01-20T12:15:07.890 に答える
3

ユーザー エージェントをフィルタリングすることで、アプリケーションがサイトからブロックされていることがわかりました。値を変更したところ、完全に機能するようになりました。

次のようにコードを変更しました。

NSString *userAgent = @"Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC)";
NSURL *url = [NSURL URLWithString: @"http://www.sanmarinocard.sm"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url];
[request setValue:userAgent forHTTPHeaderField:@"User-Agent"];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];

ありがとうございました!

于 2013-01-21T22:36:42.237 に答える
1

今、それはうまくいきます。一時的なサーバーが利用できないためにエラーが発生した可能性があります。

また、前述のとおり、使用NSUTF8StringEncodingを強くお勧めします。

編集:

また、キャッシングとの関係もありdataWithContentsOfURL:ます。内部でNSURLConnectionを使用します。これは、デフォルトで応答をキャッシュします。それを無視する方法については、この質問を参照してください。

于 2013-01-20T12:02:24.503 に答える