NSURLRequest,为什么craigslist会返回404?

时间:2010-10-01 23:36:43

标签: objective-c nsurlrequest craigslist

我正在构建我的第一个iPhone应用程序而且我受到了阻碍。

我正在尝试构建一个RSS阅读器,我正在尝试使用craigslist中的一个feed。此代码使用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上进行一些转义吗?

带有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 个答案:

答案 0 :(得分:3)

好的,我想通了。 Craigslist阻止了这个请求。更改应用程序名称时,相同的代码可以正常工作。例如,当应用程序名称包含字符串“craig”时,返回的响应代码为404.当我将应用程序名称更改为不包含名称“craig”时,响应为200.

答案 1 :(得分:3)

如果User-Agent标头包含字符串“craig”,Craigslist会阻止URL请求。默认情况下,Apple会在您的网址请求的User-Agent标头中包含您的应用名称。要绕过该块,请使用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"];
相关问题