Разбор XML с HTTPS URL с использованием NSXMLParser? - PullRequest
4 голосов
/ 07 января 2009

Я пытаюсь проанализировать XML напрямую из URL-адреса HTTPS следующим образом:

NSString *const URL = @"https://some/HTTPS/url";
NSURL* url = [NSURL URLWithString:URL];
NSXMLParser* parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser parse];

У меня есть следующий метод делегата для парсера:

- (void) parser:(NSXMLParser *)parser 
didStartElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qualifiedName 
attributes:(NSDictionary *)attributeDict
{
    NSLog(@"Started parsing %@", elementName);
}

Кажется, что это нормально работает для HTTP URL, но не показывает результат для HTTPS URL.

Как я могу это исправить?

Ответы [ 4 ]

8 голосов
/ 08 января 2009
  1. Ни один из методов initWithContentsOfURL: ... не позволит вам ответить на сообщение аутентификации с сервера https. Итак, посмотрите на NSURLConnection и NSURLDownload , в которых есть сообщения делегатов, которые помогают обрабатывать аутентификацию.

  2. Чтобы узнать больше об использовании URL для связи с серверами, прочитайте Введение в систему загрузки URL .

  3. Что касается анализа HTML с помощью синтаксического анализатора XML, он будет надежно работать только с XHTML. Так что, если вы создаете и анализируете свои собственные файлы XHTML, это должно работать в большинстве случаев. Но если вы загружаете любой HTML-файл из Интернета, то XML-парсер часто не сможет проанализировать файл. Вы можете посмотреть WebKit .

4 голосов
/ 08 января 2009

Вы должны использовать NSURLConnection для загрузки данных XML, а затем проанализировать выходные данные, а не использовать -initWithContentsOfURL:.

NSURLConnection является более надежным и также позволяет выполнять асинхронную выборку, что вам определенно следует делать, -initWithContentsOfURL: блокирует основной поток.

1 голос
/ 08 января 2009

Кроме того, большинство HTTPS-серверов проверяют строку User-Agent и плохо воспроизводятся, если не указано такое значение заголовка. Это определенно помогает иметь некоторую (действительную) строку User-Agent в запросе url.

0 голосов
/ 02 апреля 2009

Я не уверен, программируете ли вы iPhone или нет, но для записи, в справочнике классов NSXMLParser (в SDK для iPhone 3.0 beta 2), initWithContentsOfURL: (NSURL *) url делает НЕ представляется устаревшим.

...