我正在构建我的第一个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];
}
答案 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"];