NSURLRequest, почему Craigslist возвращает 404? - PullRequest
2 голосов
/ 02 октября 2010

Я создаю свое первое приложение для 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-адресом 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]; 
}

Ответы [ 2 ]

3 голосов
/ 25 мая 2011

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"];
3 голосов
/ 06 декабря 2010

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

...