Имя: Пароль:
1C
 
Узнать внешний 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) По делу можешь что-то сказать?
Независимо от того, куда вы едете — это в гору и против ветра!