GetURLasTextwPROXY. Получение содержимого URL из-за прокси-сервера.

Автор: Аркадий Перла

Периодически приходится получать данные из веб с помощью команды Insert from  URL либо Import Records, которая позволяет получить данные XML. Хорошим примером является импорт данные о курсе валют, с сайта ЦБ.  Но что делать если компьютер или  компьютер на котором установлен FileMaker Server (в случае если импорт идет на сервер по расписанию) имеет доступ к интернет, только через прокси-сервер. Такая ситуация вполне возможна, если такое подключение диктует политика безопасности компании. В этом случае обе команды импорта FileMaker не сработают, так как FileMaker просто «не увидит» нужный адрес.

Недавно я столкнулся с подобной проблемой и покопавшись в интернете (спасибо, Google) быстро нашел решение. Им оказалось использование популярного плагина 360Works ScriptMaster. Напомню, что плагин ScriptMaster позволяет исполнять написанные на Java функции из под FileMaker, что открывает очень широкие возможности. ScriptMaster распространяется бесплатно, а в комплект входит множество готовых полезных функций, что делает его одним из самых популярных плагинов для FileMaker.

В ScriptMaster уже есть функция GetURLasText, которая позволяет получить содержимое страницы (для xml-файла это будет содержимое xml). Все что нам нужно это добавить в начало этой функции несколько строк кода:

if (proxyHost != null && proxyPort != null )
{
System.properties.putAll( [\»http.proxyHost\»:proxyHost, \»http.proxyPort\»:proxyPort] );
}

Где proxyHost и proxyPort это адрес и порт прокси-сервера. Если параметры пустые, то они игнорируются и соединение происходит как обычно.

В итоге создадим функцию GetURLasTextwPROXY( url ; proxyHost ; proxyPort )

Полный вид параметра инициализации функции в FileMaker выглядит так:

RegisterGroovy( «GetURLasTextwPROXY( url ; proxyHost ; proxyPort )» ; «if (proxyHost != null && proxyPort != null )¶

System.properties.putAll( [\»http.proxyHost\»:proxyHost, \»http.proxyPort\»:proxyPort] );¶



URL url = new URL(url);¶
URLConnection conn = url.openConnection();¶
InputStream input = conn.getInputStream();¶

//Determine character encoding. Default to utf-8 if it cannot be determined.¶
String encoding = \»utf-8\»;¶
String type = conn.getContentType();¶
if( type != null ) {¶
int n = type.toLowerCase().indexOf(\»charset=\»);¶
if( n != -1 ) {¶
n += \»charset=\».length();¶
encoding = type.substring( n ).replace(\»\\\»\», \»\»);¶



try {¶
StringBuffer sb = new StringBuffer( input.available() );¶
Reader r = new InputStreamReader( input, encoding );¶
char[] buff = new char[2048];¶
int charsRead;¶
while( (charsRead=r.read( buff )) != -1 ) {¶
sb.append( buff, 0, charsRead );¶

return sb.toString();¶
} finally {¶
input.close();¶
}» )

 

 

2 Комментариев

  1. Аркадий, попробуйте подложить вот такой файлик в php проекты.
    Обращаться к файлику:
    hostipaddress/fmi-test/php_proxy_get.php?url=www.cbr.ru%2Fscripts%2FXML_daily.asp%3Fdate_req%3D04%2F03%2F2015
    (То есть к параметру url добавить нужный адрес, пропущенный через GetAsUrlEncoded)
    =================================================

    ========================
    этот php скрипт вернет родной xml с сайта. Но что самое замечательное, прямо внутри этого скрипта можно отобрать из переменной $out только нужные валюты и сформировать ответ в формате файлмейкера. То есть прямо по этому запросу можно будет делать готовый импорт в файлмейкер.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

45 + = 52