2

私は最初のiPhoneアプリを作成していて、困惑しています。

RSSリーダーを作成しようとしていますが、craigslistからのフィードを使用しようとしています。このコードは、stackoverflowを使用して、「ステータスコード:200」を返します。

- (void)parseRSSFeed:(NSString *)feed withDelegate:(id)delegate
{
 responseData = [[NSMutableData data] retain];
 feed = @"http://stackoverflow.com";
 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:feed]];
 [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
 NSLog(@"status code: %d", [((NSHTTPURLResponse*) response) statusCode]);
 [responseData setLength:0];
}

すべては順調です。しかし、フィードを「http://portland.craigslist.org/muc/」に変更すると、ステータスコードは404になります。

足りないものはありますか?CraigslistはiPhoneのウェブサイトへのアクセスを禁止していますか?URLで実行する必要のあるエスケープはありますか?

クレイグリストのURLを含むコードはこちらです。これは私が使用しているものとまったく同じで、404を返します。

- (void)parseRSSFeed:(NSString *)feed withDelegate:(id)delegate
{
 responseData = [[NSMutableData data] retain];
 feed = @"http://portland.craigslist.org/muc/";
 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:feed]];
 [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
}
4

2 に答える 2

3

わかりました。Craigslist はこのリクエストをブロックしています。アプリの名前を変更すると、同じコードが機能します。たとえば、アプリ名に文字列「craig」が含まれている場合、返された応答コードは 404 でした。アプリ名を「craig」という名前が含まれないように変更すると、応答は 200 になります。

于 2010-12-06T15:42:57.620 に答える
3

User-Agent ヘッダーに文字列「craig」が含まれている場合、Craigslist は URL リクエストをブロックします。Apple は、デフォルトで、URL 要求の User-Agent ヘッダーにアプリ名を含めます。ブロックを回避するには、NSURLRequest の代わりに NSMutableURLRequest を使用し、User-Agent ヘッダーを偽造します。

#define kUserAgentString @"Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27"

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:theURL] autorelease];
NSString *userAgent = kUserAgentString;
[request setValue:userAgent forHTTPHeaderField:@"User-Agent"];
于 2011-05-24T20:42:27.947 に答える