Использование openStream с URL-адресом, в котором есть поддомен с подчеркиванием, возвращает ioexception в Android.Зачем? - PullRequest
2 голосов
/ 27 марта 2011

У меня есть следующий код, который является довольно стандартным для извлечения XML-документа из Интернета в Android (насколько я понимаю):

URL rssUrl = new URL("web_1.whatever.com");            
SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
XMLReader myXMLReader = mySAXParser.getXMLReader();
RSSHandler myRSSHandler = new RSSHandler();
myXMLReader.setContentHandler(myRSSHandler);
myXMLReader.parse(new InputSource(rssUrl.openStream()));

Это прекрасно работает для большинства ситуаций.Проблема возникает, когда я пытаюсь получить XML-документ с веб-адреса с подчеркиванием "_" в поддомене, например: web_1.whever.com.openStream (), очевидно, не работает с URL-адресами, которые имеют подчеркивание в них.Я за всю свою жизнь не нашел никакой документации по этому вопросу и хотел бы найти способ обойти это, чтобы он работал для URL с подчеркиванием.Введенный URL-адрес поступает от пользователя, который размещает файл XML, и заставляет их размещать файл XML в другом домене, и я не хочу, чтобы он делал это.Я перепробовал все, что мог придумать, поэтому любая помощь была бы безмерно признательна.

Я получаю ошибку ниже.

03-27 03: 44: 54.274: WARN / System.err (1051): java.io.IOException: недопустимый символ в имени хоста с индексом 0: web_1.whwhat.com

03-27 03: 44: 54.274: WARN / System.err (1051): по адресу org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect (HttpURLConnectionImpl.java:874)

03-27 03: 44: 54.274: WARN / System.err (1051): по адресу org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream (HttpURLConnectionImpl.java): 1152)

03-27 03: 44: 54.274: WARN / System.err (1051): at java.net.URL.openStream (URL.java:653)

Есть идеи?Или есть ли место, где я мог бы взглянуть на код openStream?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 27 марта 2011

Допустимые имена хостов не могут содержать подчеркивания ("_"), поэтому вы видите правильное поведение.

После еще одного поиска я обнаружил, что имена хостов MS могут нарушать стандарт. Единственный вариант, о котором я могу подумать, - найти DNS-распознаватель, который может обрабатывать подчеркивание в имени хоста и напрямую использовать IP-адрес.

0 голосов
/ 30 марта 2011

вы должны использовать:

InputStream in = Url.openConnection().getInputStream();
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
RssHandler handler = new RssHandler();
parser.parse(in, handler);
...