Заставьте JRuby наследовать настройки Java-прокси - PullRequest
5 голосов
/ 30 января 2011

Я бы хотел сделать HTTP-запросы из кода Rails, работающего поверх JRuby.

Как сделать так, чтобы повторно использовать настройки http.proxyHost, http.proxyPort и http.nonProxyHosts, заданные для JVM, выполняющей его?

Ответы [ 2 ]

3 голосов
/ 31 января 2011

Чтобы передать флаги JVM через JRuby, используйте -J....В этом случае:

jruby -J-Dhttp.proxyHost=foo -J-Dhttp.proxyPort=1234 -J-Dhttp.nonProxyHosts="*.bar.com" ...

Это объясняется в справочном тексте JRuby.

-J[java option] pass an option on to the JVM (e.g. -J-Xmx512m)
                use --properties to list JRuby properties
                run 'java -help' for a list of other Java options
1 голос
/ 10 января 2014

У меня была такая же проблема.Я обнаружил, что java или net :: http не подчиняются опции nonProxyHosts.Лучший способ обойти это - изменить настройки ENV_JAVA, чтобы учесть это.

Шаги, которые я предпринял для обеспечения использования nonProxyHosts, были следующими:

1) JAVA_OPTS="-Dhttp.proxyHost=192*** -Dhttp.proxyPort=1234 -Dhttp.nonProxyHosts=local|127.0.0.1"
OR
1) JRUBY_OPTS="-J-Dhttp.proxyHost=192*** -J-Dhttp.proxyPort=1234 -J-Dhttp.nonProxyHosts=local|127.0.0.1"

Имейте в виду, чтопо крайней мере, для java1.7 у nonProxyHosts не должно быть кавычек, смотрите здесь .

Теперь я обнаружил, что либо net :: http, либо сама java на самом деле не учитывает опцию nonProxyHosts.*

Однако вы можете обойти это, выполнив в JRuby следующее:

a = URI("http://someurl")
Net::HTTP.new(a).proxy?.should == true
regex = /$#{ENV_JAVA["http.nonProxyHosts"]}/ #dollar needed to behave as expected
if a.hostname.match(regex)
   ENV_JAVA["http.proxyHost"]=nil
end
Net::HTTP.new(a).proxy?.should == false

Надеюсь, это поможет.

...