2010-10-01 5 views
2

Я строю свое первое приложение для iPhone, и меня заглушат.NSURLRequest, почему Craigslist возвращает 404?

Я пытаюсь создать 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 Craigslist, находится здесь. Это точно так же, как я его использую, и он возвращает значение 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]; 
} 

ответ

3

Хорошо, я понял. Craigslist блокирует этот запрос. Тот же код работает при изменении имени приложения. Например, когда имя приложения содержало строку «craig», код ответа, который был возвращен, был 404. Когда я изменил имя приложения, чтобы не содержать имя «craig», тогда ответ будет равен 200.

+0

Сладости, спасибо Хари! – thekevinscott

3

Craigslist блокирует URL-запросы, если заголовок User-Agent содержит строку «craig». Apple по умолчанию включает ваше имя приложения в заголовке User-Agent ваших запросов URL. Чтобы получить вокруг блока, используйте NSMutableURLRequest вместо NSURLRequest и Поддельный из 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"]; 
Смежные вопросы