Выполнение HTTP-запросов в браузере с имитацией какао - PullRequest
1 голос
/ 21 марта 2011

Поэтому я пытаюсь прочитать содержимое файла HTML, чтобы очистить некоторые метаданные определенного веб-сайта.

Проблема, с которой я сталкиваюсь, заключается в том, что выполнение HTTP-запросов в target-c с использованием вызовов библиотеки какао дает мне другой файл HTML, чем когда я выполняю вызов через веб-браузер или мой реализованный вызов python.

Причина, по которой это раздражает, заключается в том, что я очищаю ключ, который генерируется при каждом запросе. Кажется, сайт знает, когда я выполняю запрос через какао, а не из библиотеки python или из браузера.

Кто-нибудь может пролить свет на это?

Вот следующий код Python, который я выполняю:

self.url = 'http://sample-site.com/1?ax=1ts=123123.12'
request = urllib2.Request(complete_url)
response = urllib2.urlopen(request)
html_data = response.read()

Вот следующие попытки какао, которые я пробовал:

  1. NSString * completeUrl = [url stringByAppendingFormat:@"//%d?ax=1&ts=%1.2f", pageNumber, time];

  2. Еще одна попытка:

        NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:hypeURL] autorelease];
        [request setValue:userAgent forHTTPHeaderField:@"User-Agent"];
        NSURLResponse* response = nil;
        NSError* error = nil;
        NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        NSString *hypeHTML = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    

Попытки в какао получить HTML, однако HTML содержит ключевые значения, которые я анализирую и которые генерируются при каждом обновлении. Однако при выполнении запросов с использованием какао значения ключей не меняются при каждом выполнении приложения (тот же ключ в HTML), тогда как в Python HTML правильно имеет разные ключи для каждого запроса.

Спасибо

1 Ответ

3 голосов
/ 21 марта 2011

Веб-сайт, вероятно, обнаруживает пользовательский агент и возвращает различный контент на его основе.
Просто измените пользовательский агент в заголовке вашего запроса:

NSString* userAgent = @"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8) Gecko/20051111 Firefox/1.5 BAVM/1.0.0";
NSURL* url = [NSURL URLWithString:@"http://www.stackoverflow.com/"];
NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease];
[request setValue:userAgent forHTTPHeaderField:@"User-Agent"];
NSURLResponse* response = nil;
NSError* error = nil;
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *result = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"%@",result);

С этим кодом серверсчитает, что вы используете Firefox в Linux:)

Получить текущие пользовательские агенты / пользовательские агенты поиска для определенных браузеров:
http://www.useragentstring.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...