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 上进行一些转义吗?

带有 craigslist 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 标头中。要绕过这个障碍,请使用 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"];
于 2011-05-24T20:42:27.947 回答