Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> URL отдает разные данные IE и Java, запрос из программы возвращает не то 
V
    Опции темы
_Y_
Дата 26.10.2010, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Пытаюсь сделать небольшую програмку обращающуюся к открытой базе данных. На одном из шагов получаю разницу между запросом из адресной строки IE и запросом из программы. Вот предельно упрощенная программа запроса:
Код

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;


public class T {
    
    private static final String 
    url_1 = "http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Undef&name=Acartia+bifilosa&srchmode=1&keep=1&a=Go&lvl=3&p=has_linkout&p=mapview&p=genome_blast",
    url_2 = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=Nucleotide&cmd=Search&dopt=DocSum&term=txid544687[Organism:noexp]";

    public static void main(String[] args) {
        
        try    {
            
            URL url;
            url = new URL(url_1);
//            url = new URL(url_2);
            
            URLConnection conn = url.openConnection ();

            BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            BufferedWriter bw = new BufferedWriter(new FileWriter(new File("C:/t.htm")));

            String line;
            while ((line = rd.readLine()) != null) {
                bw.write(line);
                bw.newLine();
            }
            
            bw.close();
            rd.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


url_1 вставленный в адресную строку броузера возвращает правильную страницу. Программа делает то же самое - пишет правильную страницу в файл.

url_2 правильную страницу позволяет получить только в броузере. Программа же пишет в файл совсем другую страницу. 

Что я делаю неправильно? Спасибо!


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Vasay
Дата 26.10.2010, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 3
Всего: 73



_Y_, 

Первое что бросилось в глаза - редирект.

Цитата

HTTP/1.1 301 Moved Permanently
Date: Tue, 26 Oct 2010 20:18:55 GMT
Server: Apache
Location: http://www.ncbi.nlm.nih.gov/sites/entrez?d...nism%3Anoexp%5D
Content-Type: text/plain
Set-Cookie: 1XQLhPMlNtZ0pjeF5q1ZcD2-yhFfKiKickrhRPf_TOC-dd2t5V8TCCyqe39PyCWCG_mrJgtu7yRQK@39695D65CC7378D1_0098SID
Content-Length: 0
Connection: close



Возможно, поможет
Код

HttpURLConnection.setFollowRedirects(true);




А вообще расширение к фаерфоксу "Live HTTP Headers" вам в помощь.

Это сообщение отредактировал(а) Vasay - 26.10.2010, 23:21


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Skipy
Дата 27.10.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Цитата(_Y_ @ 26.10.2010,  22:03)
url_2 = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=Nucleotide&cmd=Search&dopt=DocSum&term=txid544687[Organism:noexp]";

Что я делаю неправильно? Спасибо!

Это не Вы.

http://tools.ietf.org/rfc/rfc3986.txt

Код

query         = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                / "*" / "+" / "," / ";" / "="


Квадратные скобки не входят в список разрешенных в query символов (они входят в gen-delims). Скорее всего, Java просто обрезает хвост при запросе. Поставьте любой HTTP-монитор и посмотрите, что точно посылается.

Это сообщение отредактировал(а) Skipy - 27.10.2010, 12:28


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
_Y_
Дата 27.10.2010, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Vasay, не помогает, к сожалению.

Skipy, понятно. Еще бы идею как с проблемой бороться smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Vasay
Дата 27.10.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 3
Всего: 73



Цитата

Skipy, понятно. Еще бы идею как с проблемой бороться


Цитата

txid544687[Organism:noexp] 


Вот это прогнать через URL Encoder

http://download.oracle.com/javase/6/docs/a...URLEncoder.html


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
_Y_
Дата 27.10.2010, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Vasay, прогоняю через энкодер. Пошлучаю вот такую  строку
Код

url_2 = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=Nucleotide&cmd=Search&dopt=DocSum&term=txid544687%5BOrganism%3Anoexp%5D";
Эффекта на результат никакого. Та же разница между результатами запроса из IE и Java.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Skipy
Дата 27.10.2010, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Вы знаете, может я не специалист, но разницы между запросами из Opera и Java я не увидел. Во всяком случае визуальной. И там и там 9 результатов в поиске, идентичных.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
_Y_
Дата 29.10.2010, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Skipy, интерррресссно. Тогда вопрос а как Вы мою программу запускаете?

Если я подаставляю эту строку в качестве адреса в IE или GoogleChrome - выдает как и надо 9 результатов поиска. Если же запускаю эту мою Java программу из-под Eclipse или просто из командной строки (откомпиллированную в том же Eclipse), рузультат куда-как печальнее.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Skipy
Дата 29.10.2010, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Цитата(_Y_ @ 29.10.2010,  14:10)
Skipy, интерррресссно. Тогда вопрос а как Вы мою программу запускаете?

Я не Вашу программу запускаю, у меня ее естественным образом нет. smile Я взял Вашу ссылку.

Код
    public static void main(String[] args) throws Exception{
        URL url = new URL("http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=Nucleotide&cmd=Search&dopt=DocSum&term=txid544687%5BOrganism%3Anoexp%5D");
        byte[] buffer = new byte[16384];
        InputStream is = url.openStream();
        FileOutputStream fos = new FileOutputStream("content.html");
        while (true){
            int res = is.read(buffer);
            if (res == -1)
                break;
            if (res > 0){
                fos.write(buffer, 0, res);
            }
        }
        fos.flush();
        fos.close();
        is.close();
    }


Ну и соответственно, сохраняю то, что получил в Opera, открываю два локальных файла и смотрю. Они без CSS, естественно, но результаты хотя бы одинаковые. Хотя файлы, конечно разные, причем в каких-то частях существенно. Я их в архиве прикрепил, content.html - из Java, content1.html - из Opera

Это сообщение отредактировал(а) Skipy - 29.10.2010, 16:07

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  files.zip 30,75 Kb


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
_Y_
Дата 30.10.2010, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Цитата(Skipy @  29.10.2010,  16:06 Найти цитируемый пост)
Я не Вашу программу запускаю, у меня ее естественным образом нет
 А вот и противоестественно - она в моем первом посте smile 

За ответ же большое спасибо. Теперь я, кажется, въезжаю. Сервер, скорее всего, возвращает одно и то же, а вот при сохранении страницы в начало добавляется (или не добавляется) огромная структура с деревом линков к ресурсам вебсайта. Я не подумал сначала сохранить из IE, а потом открыть сохраненный файл. 

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

Значит проблема не в Java, а, скорее всего, в метакомандах самой страницы. Ну и ладно. Теперь можно продолжать работать (просто принимать во внимание наблюдаемый эффект).

Еще раз спасибо! smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.