ग्रेड प्रॉक्सी प्रॉक्सी


161

मुझे Jenkins के लिए Gradle / Artifactory एकीकरण का उपयोग करने के लिए एक प्रॉक्सी सर्वर के माध्यम से Gradle से वेब एक्सेस की आवश्यकता है। समस्याओं के संभावित कारणों को कम करने के लिए, मैं मैन्युअल रूप से Artifactory प्लगइन को build.gradle में जोड़ता हूं और इसे कमांड लाइन से चलाता हूं:

apply {
    apply from: "http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle"
}

इस विवरण के बाद मैंने अपने गृह निर्देशिका में निम्न .gradle / gradle.properties निर्दिष्ट किया:

systemProp.http.proxyHost=hostname
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=de\\username
systemProp.http.proxyPassword=xxx

उपरोक्त प्रॉक्सी कॉन्फ़िगरेशन के साथ (जो कि अन्यथा काम करने के लिए जाना जाता है), यह विफल रहता है:

11: 33: 17.699 [ERROR] [org.gradle.BuildExceptionReporter] इसके कारण: java.io.IOException: सर्वर ने HTTP प्रतिक्रिया कोड लौटाया: 407 URL के लिए: http://gradle.artifactoryonline.com/gradle/plugins/org/org/ jfrog / buildinfo / buildinfo-निकालने-Gradle / 1.0.1 / artifactoryplugin-1.0.1.gradle

मेरे पास चुनने के लिए दो प्रॉक्सी सर्वर हैं, और एक हमेशा 407( प्रॉक्सी प्रमाणीकरण आवश्यक है ) के साथ प्रतिक्रिया करता है , दूसरे के साथ 502( खराब गेटवे ), इसलिए स्पष्ट रूप से, प्रॉक्सीहोस्ट और प्रॉक्सीपोर्ट विकल्प का उपयोग किया जाता है।

जैसा कि उपयोगकर्ता नाम (एक सक्रिय निर्देशिका उपयोगकर्ता पर आधारित) में बैकस्लैश है, मैंने दोनों की कोशिश की \\और \, लेकिन न तो काम किया। निर्दिष्ट उपयोगकर्ता मशीन और सक्रिय निर्देशिका में लॉग इन किए गए उपयोगकर्ता से अलग है। यह उपयोगकर्ता का क्रेडेंशियल प्रॉक्सी के लिए मान्य नहीं है, इसलिए मुझे एक अलग उपयोगकर्ता निर्दिष्ट करने में सक्षम होने की आवश्यकता है।

जेनकींस या आर्टिफ़ैक्ट्रीज़ GUI में समान विकल्पों को सेट करना काम किया।


1
एक ही समस्या होने से, यहां किसी भी उत्तर ने मदद नहीं की (यहां तक ​​कि वंचित / गैर-पदावनत विधियों का पालन करने वाले)। तब मुझे एहसास हुआ कि https प्रॉक्सी होना जरूरी है: stackoverflow.com/a/27686730/1024839
hkoosha

आपको इस url को और अधिक पूर्ण और अद्यतन (http और https के साथ) देखना चाहिए
Guillaume Husta

@GuillaumeHusta धन्यवाद, लेकिन कृपया ध्यान दें कि यह सवाल 5 साल पहले पोस्ट किया गया था जब ग्रैडल 0.8 नवीनतम रिलीज थी, और इस पर प्रलेखन सिर्फ सादा गलत था (इस प्रश्न पर मेरी अपनी प्रतिक्रिया देखें)।
डैनियल बेक

प्रॉक्सी में उद्धरण का उपयोग करते समय मुझे यह समस्या थी, systemProp.http.proxyHost = xyz not systemProp.http.proxyHost = 'xyz' का उपयोग करें
ir2pid

जवाबों:


211

डैनियल की प्रतिक्रिया पर शोधन:

HTTP केवल प्रॉक्सी कॉन्फ़िगरेशन

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

HTTPS केवल प्रॉक्सी कॉन्फ़िगरेशन

gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

HTTP और HTTPS प्रॉक्सी कॉन्फ़िगरेशन दोनों

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

उपयोगकर्ता और पासवर्ड के साथ प्रॉक्सी कॉन्फ़िगरेशन

gradlew -Dhttp.proxyHost = 127.0.0.1 -Dhttp.proxyPort = 3128 - Dhttps.proxyHost = 127.0.0.1 -Dhttps.proxyPort = 3129 -Dhttps.proxyUser = user -Dhttps.proxyPassword =Dadword =Dadword =Dadword =Dhttps = xyPassword = pass -Dhttp.nonProxyHosts = host1.com | host2.com

मेरे लिए काम किया ( gradle.propertiesया तो homedir या प्रोजेक्ट dir के साथ, बिल्ड अभी भी विफल रहा था)। इस समस्या को हल करने के लिए समस्या को इंगित करने के लिए धन्यवाद। Https://docs.gradle.org/current/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy पर संदर्भ दस्तावेज़ देखें

अद्यतन आप इन गुणों को भी डाल सकते हैं gradle-wrapper.properties(देखें: https://stackoverflow.com/a/50492027/474034 )।


4
Cntlm

5
आप प्रॉक्सी को कैसे हटाते हैं?
जोनाथन

2
भी -https.proxyUser = उपयोगकर्ता -Dhttps.proxyPassword = पास
ओवेन बी

10
यदि आप गुणों को ~/.gradle/gradle.propertiesसुनिश्चित करते हैं तो आप गुणों को उपसर्ग के साथ systemPropsystemProp.http.proxyHost=127.0.0.1
जोड़ सकते हैं

1
मैंने यह कोशिश की और मेरे लिए काम नहीं किया। मुझे इसे काम करने के लिए पर्यावरण चर के -Dhttp.proxyHostरूप में विकल्प ( और पसंद) निर्धारित करना पड़ा JAVA_OPTS
गोल्डनड

66

यह मेरी gradle.properties है, कृपया उन HTTPS भाग पर ध्यान दें

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118

55

मेरे build.gradleपास निम्न कार्य है, जो सामान्य लिनक्स प्रॉक्सी सेटिंग्स का उपयोग करता है, HTTP_PROXYऔर HTTPS_PROXY, शेल env से:

task setHttpProxyFromEnv {
    def map = ['HTTP_PROXY': 'http', 'HTTPS_PROXY': 'https']
    for (e in System.getenv()) {
        def key = e.key.toUpperCase()
        if (key in map) {
            def base = map[key]
            def url = e.value.toURL()
            println " - systemProp.${base}.proxy=${url.host}:${url.port}"
            System.setProperty("${base}.proxyHost", url.host.toString())
            System.setProperty("${base}.proxyPort", url.port.toString())
        }
    }
}

build.dependsOn setHttpProxyFromEnv

2
मजा आता है! यह आपके रूट का build.gradle या ऐप का build.gradle है?
Miao1007

1
विंडोज 7 पर भी काम करता है! यह स्वीकृत उत्तर होना चाहिए!

1
धन्यवाद! ऊपर विन्यास के लिए काम किया है कि एक प्रॉक्सी पासवर्ड की जरूरत नहीं है। मैंने इसे संशोधित करने के साथ काम करने के लिए या w / o प्रॉक्सी पासवर्ड नीचे देखें
Norbert

if (map.keySet ()) में कुंजी {
JustAnotherCoder

सबसे बढ़िया उत्तर। काश
ईवा

26

मेरे लिए, प्रोजेक्ट के gradle.properties फ़ाइल में इस कॉन्फ़िगरेशन को जोड़ने का काम करता है, जहाँ build.gradle फ़ाइल है:

systemProp.http.proxyHost=proxyURL
systemProp.http.proxyPort=proxyPort
systemProp.http.proxyUser=USER
systemProp.http.proxyPassword=PASSWORD
systemProp.https.proxyHost=proxyUrl 
systemProp.https.proxyPort=proxyPort
systemProp.https.proxyUser=USER
systemProp.https.proxyPassword=PASSWORD

कहाँ: प्रॉक्सी सर्वर प्रॉक्सी सर्वर का यूआरएल है ( http: // ....। )

प्रॉक्सीपोर्ट पोर्ट है (आमतौर पर 8080)

USER मेरा डोमेन उपयोगकर्ता है

पासवर्ड, मेरा पासवर्ड

इस मामले में, http और https के लिए प्रॉक्सी समान है


23

निम्नलिखित आज़माएँ:

gradle -Dhttp.proxyHost=yourProxy -Dhttp.proxyPort=yourPort -Dhttp.proxyUser=usernameProxy -Dhttp.proxyPassword=yourPassoword


2
गौर कीजिए कि यह सवाल कब पूछा गया था। मेरे जवाब में मैं जिस मुद्दे को जोड़ता हूं, उसे ग्रैडल 1.0-मील का पत्थर -8 की ओर हल किया गया था ...
डैनियल बेक

2
@ डैनियल यह सवाल पहली बात थी जो पॉप अप हुआ था, जब मैंने "ग्रेडेल प्रॉक्सी" की खोज की, तो मैंने जवाबों को कम कर दिया और मेरी ज़रूरत के लिए यह सबसे स्पष्ट था ...
बेतालिस्ता

22

एक बहुत ही सरल "URL का अनुरोध करें" जावा प्रोग्राम का उपयोग करके , मैं इस मुद्दे को दोहराने में सक्षम था।

http.proxyUserऔर http.proxyPasswordगैर-मानक प्रतीत होते हैं, यद्यपि वे लोकप्रिय हैं, विकल्प, जैसा कि वे ग्रेड ट्यूटोरियल से जुड़े जावा संदर्भ पृष्ठ में वर्णित नहीं हैं ; हालांकि ग्रैडल मैनुअल ने उनका उल्लेख किया है।

ऐसा लगता है कि जावा प्रोग्राम जो प्रॉक्सी प्रमाणीकरण का समर्थन करना चाहते हैं, उन्हें मैन्युअल रूप से ऐसा करने की आवश्यकता है (और मैं लिंक किए गए पृष्ठ पर कोड का उपयोग करके ऐसा करने में सक्षम था)।


मैंने यह मुद्दा (और एक फिक्स) ग्रैडल मुद्दे ट्रैकर को प्रस्तुत किया । उठाया गया मुद्दा GRADLE-1556 को 1.0-मील के पत्थर -8 (फरवरी 2012) में हल किया गया था


लिंक्ड ब्लॉक मेरे लिए केवल निमंत्रण के रूप में आता है। क्या इस समाधान का एक सार्वजनिक उदाहरण है?
माइक यूल

@yock मैंने ग्रैडल को जिस मुद्दे को प्रस्तुत किया है, उसका लगाव देखें, यह बहुत समान है।
डैनियल बेक

19

C: \ Users \ अपने उपयोगकर्ता नाम \। Regle \ gradle.properties पर देखें:

systemProp.http.proxyHost=<proxy host>
systemProp.http.proxyPort=<proxy port>
systemProp.http.proxyUser=<proxy user>
systemProp.http.proxyPassword=<proxy password>
systemProp.http.nonProxyHosts=<csv of exceptions>
systemProp.https.proxyHost=<proxy host>
systemProp.https.proxyPort=<proxy port>
systemProp.https.proxyUser=<proxy user>
systemProp.https.proxyPassword=<proxy password>
systemProp.https.nonProxyHosts=<csv of exceptions seperated by | >

5
@MurrayFoxcroft आपको उस उत्तर में एक लिंक कहां दिखाई देता है?
मैक्स वोल्मर

मूल रूप से स्थानीय मशीन का लिंक और फ़ाइल डंप। कृपया अधिक विस्तार से उत्तर का वर्णन करें।
मरे फोक्सक्रॉफ्ट

Superrrrrr tnx, u महसूस नहीं कर सकते हैं कि उर पोस्ट मेरे लिए कितनी उपयोगी थी, लेकिन फिर भी बड़ा धन्यवाद
Seyed Ali Roshan

@SeyedAliRoshan हम कैसे प्रॉक्सी और पासवर्ड को तर्क से पास कर सकते हैं? मैं उपयोगकर्ता उदास gradle.propaerties फ़ाइल नहीं करना चाहता।
नलपाइंटर

@ Nullpointer u ने अपनी परियोजना की श्रेणी के अंदर प्रॉक्सी सेटिंग का उपयोग करने की कोशिश की?
सैयद अली रोशन

12

gradle.propertiesप्रोजेक्ट फ़ोल्डर के अंदर एक फ़ाइल बनाएँ जहाँ build.gradleफ़ाइल मौजूद है। निम्न प्रविष्टि जोड़ें

     systemProp.http.proxyHost=proxy_url
     systemProp.http.proxyPort=proxy_port
     systemProp.http.proxyUser=USER
     systemProp.http.proxyPassword=PWD
     systemProp.https.proxyHost=proxy_url 
     systemProp.https.proxyPort=proxy_port
     systemProp.https.proxyUser=USER
     systemProp.https.proxyPassword=PWD

यदि आप प्रॉक्सी के लिए डीएनएस का उपयोग कर रहे हैं तो इसे जोड़ें systemProp.https.proxyHost=www.proxysite.com

IP के लिए, अधिक विवरण के लिए और वैश्विक स्तर पर प्रॉक्सी सेट करने के लिए केवल IP के साथ ही IP बाहर की जाँच करें http://या ऑफिसियल डॉक निर्दिष्ट करेंhttps://


9

प्रॉक्सी के पीछे ग्रेडल का उपयोग करने के 2 तरीके हैं:

कमांड लाइन में तर्क जोड़ें

(गिलौम बर्क की पोस्ट से)

अपनी श्रेणी में इन तर्कों को जोड़ें:

-Dhttp.proxyHost=your_proxy_http_host -Dhttp.proxyPort=your_proxy_http_port

या ये तर्क अगर आप https का उपयोग कर रहे हैं:

-Dhttps.proxyHost=your_proxy_https_host -Dhttps.proxyPort=your_proxy_https_port

ग्रेडल कॉन्फ़िगरेशन फ़ाइल में लाइनें जोड़ें

gradle.properties निम्नलिखित पंक्तियों को जोड़ने में:

systemProp.http.proxyHost=your_proxy_http_host
systemProp.http.proxyPort=your_proxy_http_port
systemProp.https.proxyHost=your_proxy_https_host
systemProp.https.proxyPort=your_proxy_https_port

( gradle.propertiesफ़ाइल स्थान के लिए, कृपया आधिकारिक दस्तावेज़ देखें https://docs.gradle.org/current/userguide/build_environment.html


EDIT: जैसा कि @ जोस्ट ने कहा: एक छोटा लेकिन महत्वपूर्ण विवरण जिसे मैंने शुरू में अनदेखा किया था: ध्यान दें कि वास्तविक होस्ट नाम http:// में URL का प्रोटोकॉल भाग नहीं है ...


1
एक छोटा लेकिन महत्वपूर्ण विवरण जिसे मैंने शुरू में अनदेखा कर दिया था: ध्यान दें कि वास्तविक होस्ट नाम http://में URL का प्रोटोकॉल भाग नहीं है ...
Joost

5

SourceSimian की प्रतिक्रिया के आधार पर; यह विंडोज डोमेन उपयोगकर्ता खातों पर काम करता है। ध्यान दें कि उपयोगकर्ता नाम में डोमेन शामिल नहीं है,

task setHttpProxyFromEnv {
    def map = ['HTTP_PROXY': 'http', 'HTTPS_PROXY': 'https']
    for (e in System.getenv()) {
        def key = e.key.toUpperCase()
        if (key in map) {
            def base = map[key]
            def url = e.value.toURL()
            println " - systemProp.${base}.proxy=${url.host}:${url.port}"
            System.setProperty("${base}.proxyHost", url.host.toString())
            System.setProperty("${base}.proxyPort", url.port.toString())
            System.setProperty("${base}.proxyUser", "Username")
            System.setProperty("${base}.proxyPassword", "Password")
        }
    }
}
build.dependsOn setHttpProxyFromEnv

धन्यवाद! प्रॉक्सी उपयोगकर्ता नाम और पासवर्ड को गतिशील रूप से कैसे प्राप्त किया जाए, इस बारे में एक अपडेट है
Norbert

1

सिस्टम गुणों में कॉन्फ़िगर किए जाने पर उपयोगकर्ता नाम और पासवर्ड को गतिशील रूप से सेट करने वाले @sourcesimian के अपडेट और @ कुणाल-बी का उत्तर।

यदि उपयोगकर्ता नाम और पासवर्ड सेट है तो निम्नलिखित उपयोगकर्ता नाम और पासवर्ड सेट करता है या सिर्फ होस्ट और पोर्ट जोड़ता है।

task setHttpProxyFromEnv {
    def map = ['HTTP_PROXY': 'http', 'HTTPS_PROXY': 'https']
    for (e in System.getenv()) {
        def key = e.key.toUpperCase()
        if (key in map) {
            def base = map[key]
            //Get proxyHost,port, username, and password from http system properties 
            // in the format http://username:password@proxyhost:proxyport
            def (val1,val2) = e.value.tokenize( '@' )
            def (val3,val4) = val1.tokenize( '//' )
            def(userName, password) = val4.tokenize(':')
            def url = e.value.toURL()
            //println " - systemProp.${base}.proxy=${url.host}:${url.port}"
            System.setProperty("${base}.proxyHost", url.host.toString())
            System.setProperty("${base}.proxyPort", url.port.toString())
            System.setProperty("${base}.proxyUser", userName.toString())
            System.setProperty("${base}.proxyPassword", password.toString())
        }
    }
}

1

मामले में मेरी कोशिश है कि मैं एंड्रॉइड स्टूडियो अपीयरेंस एंड बिहेवियर => सिस्टम सेटिंग्स => एचटीटीपी प्रॉक्सी से प्रॉक्सी सेट करने की कोशिश करूं। लेकिन प्रॉक्सी ने काम नहीं किया इसलिए मैंने नो प्रॉक्सी पर क्लिक किया।

NO PROXY की जाँच करने से प्रॉक्सी सेटिंग को gradle.properties (ग्लोबल) से हटाया नहीं जाएगा। आपको इसे मैन्युअल रूप से निकालने की आवश्यकता है।

इसलिए मैं उदाहरण के लिए systemProp से शुरू होने वाली सभी संपत्तियों को हटाता हूं - systemProp.http.nonProxyHss = *। स्थानीय, लोकलहोस्ट।


मैं अपने बालों को एक घंटे के लिए बाहर कर रहा हूं, जाहिर तौर पर मैक पर, ये गुण मेरे लिए ऑटो-जोड़ा गया था ~/.gradle/gradle.properties। इस पर ध्यान दिलाने के लिए धन्यवाद।
एपिकपांडाफर्स

0

यदि आप प्रॉक्सी के पीछे हैं और ग्रहण का उपयोग कर रहे हैं, तो जाएं Window Menu --> Preferences --> General --> Network Connections। 'मैनुअल' के रूप में सक्रिय प्रदाताओं का चयन करें।

प्रॉक्सी एंट्री सेक्शन के तहत, HTTPS पर क्लिक करें, एडिट पर क्लिक करें और प्रॉक्सी होस्ट और पोर्ट जोड़ें। यदि उपयोगकर्ता नाम और पासवर्ड की आवश्यकता है, तो वह भी दें। यह मेरे लिए काम किया!


0

यदि HTTP त्रुटि 407 के साथ यह समस्या केवल चयनित संकुल के लिए हुई है, तो समस्या प्रॉक्सी सेटिंग और इंटरनेट कनेक्शन में नहीं है। आप नेट के माध्यम से अपने पीसी को इंटरनेट पर उजागर कर सकते हैं और फिर भी इस समस्या का सामना करेंगे। आमतौर पर एक ही समय में आप ब्राउज़र में वांछित पैकेज डाउनलोड कर सकते हैं। एकमात्र समाधान जो मुझे मिलता है: अपनी प्रोफ़ाइल में .gradle फ़ोल्डर हटाएं (प्रोजेक्ट में नहीं)। इसके बाद परियोजना को सिंक करें, इसमें लंबा समय लगेगा लेकिन सब कुछ बहाल कर देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.