|
Узнать внешний IP на веб-клиенте | ☑ | ||
---|---|---|---|---|
0
constantinevio
21.01.16
✎
09:53
|
Доброго времени суток!
Пытаюсь заставить веб-клиент узнать внешний IP и сообщить его. По интернету ходят 2 способа это сделать: http://www.develplatform.com/2013/08/ip-1.html В первом случае не получается, т.к. web-клиент не работает с временными файлами, а во втором случае возникают проблемы передачи данных с сервера на клиент.. Идеальнее всего было бы заставить работать первый вариант, но не знаю, как заменить временные файлы.... ПЛИЗ ХЭЛП |
|||
1
Cyberhawk
21.01.16
✎
10:00
|
Не той дорогой ты собрался доступ к базе ограничивать...
|
|||
2
arsik
гуру
21.01.16
✎
10:01
|
HTTPСоединение (HTTPConnection)
Получить (Get) Синтаксис: Получить(<HTTPЗапрос>, <ИмяВыходногоФайла>) Параметры: <HTTPЗапрос> (обязательный) Тип: HTTPЗапрос. HTTP-запрос. <ИмяВыходногоФайла> (необязательный) Тип: Строка. Имя файла, в который помещаются данные полученного ресурса. Если не указан или содержит пустую строку, то тело ответа может быть получено из объекта HTTPОтвет. Возвращаемое значение: Тип: HTTPОтвет. Описание: Получает данные с HTTP-сервера, используя GET-запрос. Доступность: Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). |
|||
3
arsik
гуру
21.01.16
✎
10:02
|
HTTPОтвет (HTTPResponse)
ПолучитьТелоКакСтроку (GetBodyAsString) Синтаксис: ПолучитьТелоКакСтроку(<Кодировка>) Параметры: <Кодировка> (необязательный) Тип: КодировкаТекста; Строка. Указывает кодировку, в которой должно интерпретироваться тело ответа. Если не задан, то кодировка определяется из HTTP-заголовка Content-Type. Если сервер не указал кодировку в заголовке, то используется UTF8. Кодировка может быть задана как в виде значения перечисления КодировкаТекста, так и в виде строки с указанием названия кодировки. Возвращаемое значение: Тип: Строка; Неопределено. Неопределено - если при вызове методов ОтправитьДляОбработки или Получить был установлен параметр <ИмяВыходногоФайла>. Описание: Получает тело объекта как строку. Доступность: Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). |
|||
4
constantinevio
21.01.16
✎
10:12
|
(1) Это не для ограничения доступа а для авто-определения параметров. (2) Я пытался так:
HTTPОтвет = ЗапросHTTP.Получить("/"); однако ругается на неправильное имя файла ((( |
|||
5
arsik
гуру
21.01.16
✎
10:14
|
(4) Платформа какая?
|
|||
6
constantinevio
21.01.16
✎
10:15
|
(5) 8.3.6.2071
|
|||
7
Jump
21.01.16
✎
10:16
|
(1) Каким таким образом знание своего IP адреса поможет ограничить доступ к базе?
|
|||
8
Jump
21.01.16
✎
10:21
|
(0) Первый способ не самый лучший.
Нафига парсить страницу внешнего сервиса, если можно парсить страницу своего роутера? Или постучаться на роутер по телнету или ssh и распарсить вывод ipconfig. По поводу временных файлов - запусти внешнюю утилиту, например wget, чтобы скачала страницу в нужное место, а уж с диска читай и разбирай. |
|||
9
asady
21.01.16
✎
10:22
|
(0) ИМХО самое простое написать скрипт на vbs/js который получит искомую страницу на клиенте и сохранит в файл -
из 1С запустить приложение с этим скриптом и ловить файл |
|||
10
arsik
гуру
21.01.16
✎
10:23
|
(8) Вебклиент не даст таких прав.
|
|||
11
constantinevio
21.01.16
✎
10:28
|
(8) ipconfig разве может показать корректный внешний IP во всех случаях?
|
|||
12
Cyberhawk
21.01.16
✎
10:28
|
(4) А где эти автоопределяемые параметры (внешний ИП-адрес, в частности) потом используются? Расскажи, интересно.
(7) Если НЕ ВнешнийИП такой-то Тогда Борода КонецЕсли |
|||
13
ЧеловекДуши
21.01.16
✎
10:32
|
(4) Это же Веб, ИП может быть любой. Зачем? :)
|
|||
14
constantinevio
21.01.16
✎
10:32
|
(12) Это сделано для внешних пользователей, чтобы определить к какому участку они пренадлежат, и в зависимости от участка заполнить форму.
|
|||
15
arsik
гуру
21.01.16
✎
11:16
|
(6) покажи весь код
|
|||
16
constantinevio
21.01.16
✎
11:43
|
(15) Я ничего не менял, т.е. процедура выглядит так:
// Создаем HTTP-подключение ЗапросHTTP = Новый HTTPСоединение("2ip.ru"); // Создаем временный файл для записи HTML-текста веб-страницы ВременныйФайл = ПолучитьИмяВременногоФайла(); // Выполняем запрос и записываем текст страницы во временный файл ЗапросHTTP.Получить("/", ВременныйФайл); // Считываем содержимое временного файла ТекДок = Новый ТекстовыйДокумент; ТекДок.Прочитать(ВременныйФайл); // Находим строку с IP-адресом Для Сч=1 По ТекДок.КоличествоСтрок() Цикл Стр=ТекДок.ПолучитьСтроку(Сч); Если Найти(ВРег(Стр),"CLIP.SETTEXT")>0 Тогда // Ищем значение IP-адреса в тексте СтрПодготовленная = СокрЛП(Стр); СимволНачало = Найти(СтрПодготовленная, "'"); СтрокаБуффер = Сред(СтрПодготовленная, СимволНачало+1, СтрДлина(СтрПодготовленная) ); СимволКонец = Найти(СтрокаБуффер, "'"); СтрокаIP = Сред(СтрокаБуффер, 0, СимволКонец-1); // Выводим результат Предупреждение("Ваш IP: " + СтрокаIP); КонецЕсли; КонецЦикла; // Удаляем временный файл УдалитьФайлы(ВременныйФайл); Все работало, пока не попробовали веб-клиент... Жалуется на отсутствие процедуры ПолучитьИмяВременногоФайла() |
|||
17
Jump
21.01.16
✎
11:55
|
(11) Разумеется просто делать его надо на роутере.
Какой адрес роутер получил от провайдера, тот и покажет. |
|||
18
arsik
гуру
21.01.16
✎
11:56
|
(17) Проще использовать вот этот сервис
http://myip.dnsomatic.com/ |
|||
19
Jump
21.01.16
✎
11:58
|
Так, если это веб клиент, то зачем на клиенте узнавать свой адрес? Может проще это сделать на сервере?
Там то видно откуда пришел клиент. |
|||
20
arsik
гуру
21.01.16
✎
12:00
|
(19) :) Покажи.
|
|||
21
constantinevio
21.01.16
✎
12:00
|
(19) КАК? :)
|
|||
22
arsik
гуру
21.01.16
✎
12:10
|
(16) Читать мануалы нужно. Вот правильный вариант
хттпСоединение = Новый HTTPСоединение("myip.dnsomatic.com"); хттпЗапрос = Новый HTTPЗапрос(); хттпОтвет = хттпСоединение.Получить(хттпHTTPЗапрос); Сообщить("Мой IP = "+хттпОтвет.ПолучитьТелоКакСтроку()); |
|||
23
arsik
гуру
21.01.16
✎
12:11
|
Сори ошибка. Вот так правильно
хттпСоединение = Новый HTTPСоединение("myip.dnsomatic.com"); хттпЗапрос = Новый HTTPЗапрос(); хттпОтвет = хттпСоединение.Получить(хттпЗапрос); Сообщить("Мой IP = "+хттпОтвет.ПолучитьТелоКакСтроку()); |
|||
24
arsik
гуру
21.01.16
✎
12:14
|
Вот так еще правильнее :)
хттпСоединение = Новый HTTPСоединение("myip.dnsomatic.com"); хттпЗапрос = Новый HTTPЗапрос(); хттпОтвет = хттпСоединение.Получить(хттпЗапрос); Если хттпОтвет.КодСостояния = 200 Тогда Сообщить("Мой IP = "+хттпОтвет.ПолучитьТелоКакСтроку()); иначе Сообщить("Обломс. По причине HTTP ("+хттпОтвет.КодСостояния+")"); КонецЕсли; |
|||
25
constantinevio
21.01.16
✎
13:12
|
(24) Спасибо огромное!!! Работает!))) Я уже надежду начал терять.
|
|||
26
Юрий Лазаренко
21.01.16
✎
13:15
|
(23) Отлично, тоже искал решение данного вопроса.
|
|||
27
constantinevio
21.01.16
✎
13:24
|
Что-то я рано порадовался((( HTTPСоединение на веб клиенте не работает((
|
|||
28
constantinevio
21.01.16
✎
13:58
|
ошибка отображения типов отсутствует отображение для типа HTTPСоединение
|
|||
29
arsik
гуру
21.01.16
✎
14:04
|
(27) Тогда только HTMLДокумент со скриптом. Как мне кажется. Или тонкий клиент.
|
|||
30
arsik
гуру
21.01.16
✎
14:08
|
(29) + Хотя тоже нет. HTML документа нет в веб клиенте
|
|||
31
mistеr
21.01.16
✎
14:14
|
(14) А посложнее способа не нашлось?
|
|||
32
ЧеловекДуши
21.01.16
✎
14:17
|
(14) Вот оно как Михалыч. Прежде чем загружать Отдел персонала, вы решили загрузиться сами :)
В след. раз ваш филиал может работать через сотовые компании, там ИП будет вообще московский :) ... Задача бред... и по ИП не даст полной гарантии :) |
|||
33
constantinevio
21.01.16
✎
14:46
|
(32) Мне и не нужна полная гарантия. Если удалось определить айпишник и идентифицировать контрагента - поля заполняются, и функция становится доступна. Если айпишник "московский", тогда функция - не доступна, поля не заполняются.
Есть что по делу предложить? |
|||
34
constantinevio
21.01.16
✎
14:47
|
(30) Убиться веником
|
|||
35
constantinevio
21.01.16
✎
15:54
|
Заставил эту хрень работать следующим образом:
ВинХТТП = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); ВинХТТП.Option(2,"Windows-1251"); ВинХТТП.Open("GET", "http://myip.dnsomatic.com.", 0); ВинХТТП.Send(); Ответ = ВинХТТП.ResponseText; Однако пришлось изменить настройки безопасности браузера. Работает только в IE, через раз.... FUCK 1c |
|||
36
PR третий
21.01.16
✎
15:59
|
(35) Нечего на зеркало пенять, если рожа крива
|
|||
37
constantinevio
21.01.16
✎
21:36
|
(36) По делу можешь что-то сказать?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |