Показать полную графическую версию : Задачка для знатоков форм.
hasherfrog
07-06-2005, 13:39
Вот какое дело. Хотел сделать себе буркмарклет, который будет быстро делать IP Lookup. Для примера того, что я хочу, вот:
javascript:(function(){x=prompt(%22Uin:%22,%22%22);document.location=%22http://www.icq.com/whitepages/about_me.php?uin=%22+x})();
Вышел на страницу http://www.whois-service.ru/lookup/
Пытаюсь сделать букмарклет для быстрого запроса - НЕ МОГУ.
Казалось бы, должно быть что-то типа
http://www.whois-service.ru/lookup/?domain=195.19.16.100&imageField2.x=0&imageField2.y=0
http://www.whois-service.ru/lookup/?domain=195.19.16.100&imageField2.x=0&imageField2.y=0
Ан нет, не выходит! Даёт пустой лист - и всё тут.
ПОЧЕМУ?
hasherfrog
ответ может быть очень простым - у них в form стоит метод post. А GET они для данного скрипта могут игнорировать (либо на уровне сервера, либо на уровне скрипта).
возможный вариант - использование своего промежуточного скрипта, который бы по твоему запросу отправлял им сформированный POST.
второй вариант - формировать POST и уже его отправлять им прямо из буркмарклет (не уверена, что реально)
hasherfrog
07-06-2005, 14:35
mar
Я не специалист, честно, не очень понял.
Т.е. в запросе http://www.whois-service.ru/lookup/?domain=195.19.16.100&imageField2.x=0&imageField2.y=0 чего-то не хватает?
Я сначала подумал, реферрер отселживают. Пробовал с реферрером - всё равно не выходит.
Может, там кукис какой-то ещё используется? Джава скрипты со станицы смотрел-смотрел - ни черта не понял :[
нет, скорее всего все проще:
у них в форме в явном виде используется метод POST: <form method="post" action="./">, а когда ты формируешь URL-строку типа http://адрес/?переменная1=значение&переменная2=значение, то запрос идет в формате GET. Дальше возможны варианты:
- сервер может быть настроен на принятие только POST-запросов (ну, например, из соображений безопасности)
- сервер принимает все, но скрипт расчитывает на прием именно POST, а GET просто не рассматривает (например в современных версиях PHP по умолчанию, опять-таки из соображений безопасности, стоит register_globals off . Это значит, что (опять-таки по-умолчанию, но по вполне разумному умолчанию) нельзя, получив нашу строку писать сразу $переменная1, а надо $_GET['переменная1'] или, соответственно $_POST['переменная1']. Соответственно, если автор скрипта работает с POST, то он написал $_POST['переменная1'], а переменные, засандаленные в адресную строку были просто проигнорированы).
hasherfrog
07-06-2005, 15:35
А-а-а-а, Семён Семёныч...
Понял, спасибо. Век живи, век учись.
Тогда единственным способом будет сохранение html-файла на диск и вызов его, скажем, по букмарклету, с последующим заполнением нужного поля и скриптового нажатия Send. Эммм, пока не знаю как это сделать, но главное я понял.
Спасибо.
hasherfrog
ну да - свой промежуточный скрипт.
vadimiron
07-06-2005, 17:53
Тогда единственным способом будет сохранение html-файла на диск и вызов его, скажем, по букмарклету, с последующим заполнением нужного поля и скриптового нажатия Send.
или найти другой сайт, предоставляющий подобные услуги более доступным образом
vadimiron
07-06-2005, 17:58
Например, вот эта страница (http://www.zoneedit.com/whois.html). Вроде понимает и работает через GET. Реагирует на запрос типа: http://www.zoneedit.com/whois.html?zone=123.21.123.13
Вообще подобных сайтов очень много в инете, можно выбрать по вкусу :)
Если искать другие ресурсы, то тогда ИМХО лучше это:
http://leader.ru/secure/whoiz.html?q=255.255.255.255
Правда у них очень серьезные ограничения на частоты попыток.
Ну а подобным реесурсам есть даже отдельный топик:
FAQ | Как можно узнать свой ip-адрес в интернете (http://forum.oszone.net/showthread.php?t=28590)
hasherfrog
07-06-2005, 20:19
vadimiron
Greyman
Да, я понимаю, я уже сделал через nic.ru
Там тоже работает ( http://www.nic.ru/whois/?ip=195.2.62.130 )
Просто на who-is как-то больше вкусностей :]
(WHOIS, TRACERT, PING, DNS WATCH, WHATS, IP LOOKUP)
Ну я и подумал, сделаю одну примочку, другую...
Ну и если честно, просто "заело" меня, как же так? ;]
hasherfrog
Я тут в "ХВЗ" в развитие этой темы свой топик поднял (мне сам принцип пригодился бы...):
"Ручное" формирование POST запроса в браузере (http://forum.oszone.net/showthread.php?t=50223)
Также могут пригодиться эти ссылки:
http://astropolis.net/j-script/form.shtml
http://www.codenet.ru/webmast/php/HTTP-POST.php
hasherfrog
10-06-2005, 01:55
Greyman
Спасибо, статьи пригодились.
ALL, ловите решение моей задачи. Я КРУТ!!!
javascript:(function(){var nD, nW, x; x=prompt(%22IP2Lookup:%22, %22%22); if(x!=null) { nW = window.open("","HASHPOST","width=100,height=100"); nD=nW.document; nD.open(); nD.writeln('<html><head><title>:HASHPOST:</title><base target=%22_blank%22></head><body>'); nD.writeln('<form name=IPLOOCKUP method=post action=http://www.whois-service.ru/lookup/>'); nD.writeln('<script></script>'); nD.writeln('<input name="domain" type="text" class="form" size="30" />'); nD.writeln('</form></body></html>'); nW.focus(); nD.IPLOOCKUP.domain.value=x; nD.IPLOOCKUP.submit(); nD.close(); nW.close(); } })();
Только кто бы мне ещё сказал, как фокус перевести на открывающееся окно? :-P
P.S. Всем огромное спасибо ещё раз. Честно говоря, я просто не ожидал даже, что получится :]
hasherfrog
шай-бу! шай-бу!! в смысле здорово:)
чтобы окно было в фокусе: <body onLoad="window.focus()">
hasherfrog
10-06-2005, 02:41
Не совсем понятно я объяснил затруднение, наверное. Я не могу использовать onLoad - то дополнительное окно, где открывается POST форма - оно и так уже принудительно в фокусе (вызовом focus()). Но окно-ответ открывается _ещё_в_одном_ отдельном окне, которое _не_в_фокусе_ - и это, конечно, неприятно. Что-то вроде связано с target-свойством у формы, что ли? В доках по ссылке Greyman'а нашёл, но там именно про target очень смутно написано =( Я тыкал-тыкал, нихтарбайтен.
P.S. Вообще-то, нет предела совершенству. Данный скриптик можно доработать и облегчить, конечно, там лишние детальки остались... Но вот именно открытие окна мешает особенно.
hasherfrog
27-06-2005, 11:38
Вот ведь интересно.
1. Если данный букмарклет вызвать по закладке, в фокусе остаётся текущее окно.
2. Если вызвать с сылки на странице, фокус переходит на новое окно (веб сервиса).
Нисиво не понимаю (c)
Я уже было обрадовался, что есть решение в виде
window.getBrowser().selectedWindow = nW;
Но как оказалось спустя почти неделю :-О данная "фраза" вообще даёт ошибку.
Как же быть???
Это очень важно, прошу понять! Очень много хороших вещей не получается сделать.
Как, например, перебрать все открытые Tab'ы в текущем окне???
window.getBrowser - есть
window.getBrowser() - такого нет
window.getBrowser. - не имеет свойств.
Что делать?
hasherfrog
27-06-2005, 11:46
Вот для упрощения задачи:
javascript:(function(){var nW=window.open('http://mail.ru',"","");window.getBrowser().selectedWindow=nW;})();
Таже ситуация - со ссылки - в новом окне + фокус. Из букмарклета - новое окно есть, но фокус остаётся здесь (судя по всему из-за того, что меню дёргали из данного окна, а не из того что открылось).
Настройки:
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.