| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Delphi и HTML-тэги |
| Автор: Zabul 5.9.2008, 09:26 |
| Всем здравствуйте ! Хотел спросить у знающих людей совета. Задавал уже этот вопрос в Королевстве Delphi, но пока безрезультатно. Итак: давно уже занят с одной странной проблемой, связанной с запуском программки, реализующей с помощью Web-сервиса связь с определенным сервером. Дело в следующем: в исходном коде загружаемой страницы присутствует несколько тэгов <link>, а у закрывающих их тэгов отсутствует символ "/", т.е. в HTML-тексте выглядит примерно так: <link rel="icon" href="/favicon.ico" type="image/ico"> а должно бы по идее <link rel="icon" href="/favicon.ico" type="image/ico" /> Все браузеры нормально съедают эти тэги, но с Delphi этот трюк не проходит: при попытке вызова сайта через сгенерированный с помощью WSDL модуль программа натыкается на закрывающий тэг </head>, что приводит к ошибке, поскольку он воспринимается ею как закрывающий тэг для <link>. Ту же самую ошибку на той же самой строке получаю, если пытаюсь указать местонахождение WSDL-файла в компоненте HTTPRIO следующим образом: http://<адрес>?WSDL Может, кто-то знает, как это исправить ? Вполне может быть, что сейчас этот слэш вышел из моды за ненадобностью, хотя в интернете полно сайтов именно с таким описанием: http://www.htmlquick.com/reference/tags/link.html или http://www.mediaevent.de/xhtml/link.html Однако не это важно, а то, что Delphi хочет этот слэш ! Можно ли как-то отключить в HTTPRIO эту проверку ? Потому что исходник загружаемой страницы я по понятным причинам поправить не могу. |
| Автор: SneG0K 5.9.2008, 22:29 |
С чего бы это? Значит разработчику удобно было не ставить косые черты. Не нравится юзай pos(), copy() и del() |
| Автор: Zabul 8.9.2008, 12:50 |
| Да вопрос ведь совсем не в этом, мне все равно как удобно разработчику, а со строковыми функциями я хорошо знаком. Мне интересно, почему HTTPRIO брыкается, или что там за причина с этой ошибкой ? Как средствами Delphi это можно обойти ? |
| Автор: sai_NT 8.9.2008, 16:24 |
или Первое: разобраться с этим модулем самому или поискать подобную проблему с гугле или Второе: отказаться от этого компонента и заюзать другой: Инди, например, а дальше уже юзать те методы, о которых писал SneG0K. |
| Автор: Zabul 8.9.2008, 16:41 |
| sai_NT, спасибо за предложения, однако: первое: искал почти две недели, ничего похожего не нагуглил, сам разобраться не могу - опыта нет второе: а почему тогда во всех примерах из сети и в книжках WEB-сервис для Delphi организуется с помощью HTTPRIO ? Если это можно как-то сделать с помощью компонентов Indy или еще каких-нибудь, то было бы неплохо увидеть это где-то. Может, есть ссылка на описание? Поделитесь, если не жалко |
| Автор: SneG0K 8.9.2008, 17:06 | ||
Zabul, де ты видел примеры на этом HTTPRIO? И не видеть на индейцах? Так искал значит!
|
| Автор: Zabul 8.9.2008, 17:18 |
| SneG0K, видел именно то, что виделось - простейший работающий пример везде с использованием именно этой компоненты. Что до "индейцев", то для них и не искал, поскольку не подозревал, что и с их помощью можно WEB-сервис организовать. Спасибо за кусочек, однако хотелось бы поподробнее про это, а то гугл выдал кучу чего-то заумного, а мне бы чего попроще, как это было в примере с HTTPRIO |
| Автор: aktuba 8.9.2008, 18:00 |
| С индейцами можно, но геморно ;) А насчет проблемы - как мне кажеться, есть простое решение - указать DTD в начале страницы, соответствующее документу. |
| Автор: Zabul 9.9.2008, 09:11 |
| aktuba, уже интересно. Правда, с XML и в частности DTD у меня не очень, имею чисто теоретические познания в этой области. Насколько помню, DTD - это такой специальный отдельный файл-описание для определенного XML-документа. Правильно ли я понял Вашу идею - прописать имя этого DTD в начале моего WSDL (спрашиваю, потому что память подсказывает - с XML делается именно так) ? Или опять чушь сморозил? Очень хотелось бы попробовать реализовать Ваш метод, потому как с индями все выглядит слишком сложно |
| Автор: aktuba 9.9.2008, 09:56 | ||
Открой код этой страницыи посмотри первую строку:
От этой строки зависит многое ;) |
| Автор: Zabul 9.9.2008, 11:02 | ||
Так это выглядит:
Вообще-то этот файл с HTML-структурой имеет расширение jsp, во всяком случае в адресной строке в конце стоит файл с таим расширением. Это важно? |
| Автор: Zabul 9.9.2008, 12:41 |
| Поразмыслив и поэкспериментировав, пришел к такому выводу: всему виной этот самый jsp-модуль. Чтобы получить доступ к WSDL-файлам интересующего сайта, необходимо ввести логин и пароль (во всяком случае, появляется такая страница с запросом, если ввести строчку http://.....?WSDL в строке браузера). Пароль и логин мне известны, при их вводе вручную получаю доступ к сайту, правда, с парой дебильных сообщений от Apache Tomcat. Если же теперь ввожу http://.....?WSDL в браузере, передо мной наконец-то предстает WSDL во всей своей красе. Тогда другой вопрос: можно ли как-то подсунуть программно этому jsp логин и пароль? Не знаю, как сделать в Delphi, и даже такой серьезный продукт как XMLSpy от Altova не в состоянии туда пробиться. Есть ли способ это сделать? |
| Автор: aktuba 9.9.2008, 14:46 |
| снифать траффик и смотреть ;) |
| Автор: Zabul 9.9.2008, 15:20 |
| Не совсем понял, зачем снифать? Мне же известны входные данные, или я опять не в ту степь? |
| Автор: aktuba 10.9.2008, 08:45 |
| Посмотри, как осуществляется авторизация... |