2010-10-08 13 views
19

मैं प्रॉक्सी सर्वर के पीछे हूं जो इंटरनेट से सीधे कनेक्शन की अनुमति नहीं देता है। मेरे सभी PHP अनुप्रयोग उनके अपडेट चेक और आदि के लिए इंटरनेट से कनेक्ट करने में विफल रहते हैंPHP से इंटरनेट से कनेक्ट करने के लिए प्रॉक्सी सेटिंग का उपयोग कैसे करें?

मैं PHP को अपनी प्रॉक्सी सेटिंग्स कैसे बता सकता हूं?

मैं कोड में प्रॉक्सी सेटिंग्स दर्ज नहीं करना चाहता, मैं चाहता हूं कि PHP स्वयं वैश्विक कॉन्फ़िगरेशन सेटिंग या इसी तरह के कुछ के माध्यम से इसका उपयोग करे।

उत्तर

7

यह इस बात पर निर्भर करता है कि आपका PHP एप्लिकेशन इंटरनेट से कैसे जुड़ता है।

यदि PHP cUrl का उपयोग कर सबसे अधिक संभावना स्थिति लेना है। उस मामले में निम्नलिखित विकल्पों तुम्हारी मदद करेगा:

curl_setopt($handle, CURLOPT_PROXY, $proxy_url); 
curl_setopt($handle, CURLOPT_PROXYUSERPWD, "[username]:[password]"); 

यह भी देखें: http://www.php.net/manual/en/function.curl-setopt.php

+0

उत्तर के लिए धन्यवाद। लेकिन विचार करें कि यह सिर्फ मेरे अपने कोड के लिए लागू किया जा सकता है। ड्रूपल जैसे अन्य PHP अनुप्रयोगों के बारे में क्या? मुझे PHP के माध्यम से कोड के माध्यम से प्रॉक्सी के माध्यम से कनेक्ट करने की आवश्यकता है। – Alexar

1

मैं नाशपाती HTTP_Request2 मॉड्यूल का उपयोग करें।

function UrlOpen($url) 
{ 
    $request = new HTTP_Request2($url); 

    $request->setConfig(array(
    'proxy_host' => '192.168.1.6', 
    'proxy_port' => 8080, 
    'proxy_user' => 'MYUSER', 
    'proxy_password' => 'MYPASS', 
    'ssl_verify_peer' => False, 
    'connect_timeout' => 3, 
); 

    return $request; 
} 

$req = UrlOpen($url); 
$res = $req->send(); 
if ($res->getStatus() == '200') 
    $data = $request->getBody(); 
4

नमूना कोड:

function getUrl($url) 
{ 
    $ch = curl_init(); 
    $timeout = 5; // set to zero for no timeout 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_PROXY, "http://proxy.example.com"); //your proxy url 
    curl_setopt($ch, CURLOPT_PROXYPORT, "8080"); // your proxy port number 
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, "username:pass"); //username:pass 
    $file_contents = curl_exec($ch); 
    curl_close($ch); 
    return $file_contents; 
} 

echo getUrl("http://www.google.com"); 
0

Drupal के लिए आप अपने settings.php फ़ाइल के प्रॉक्सी कॉन्फ़िगरेशन सेट कर सकते हैं

यहाँ मेरी UrlOpen() फ़ंक्शन का एक सरलीकृत संस्करण है।

$conf['proxy_server'] और इसी तरह।

अधिक जानकारी here

11

अगर लगभग सभी आप के इंटरनेट का उपयोग एक प्रॉक्सी की जरूरत है, मैं पसंद करते हैं इस तरह से करते हैं।

//add this as the first line of the entry file may it is the index.php or config.php 
stream_context_set_default(['http'=>['proxy'=>'proxy-host:proxy-port']]); 

प्रॉक्सी और curl_exec

here is a official document.

+1

यह मेरे लिए बहुत अच्छा काम करता है। –

+1

यह मेरी गलती के लिए कर्ल –

+1

खेद के लिए काम नहीं करता है, यदि आप कर्ल का उपयोग करते हैं, तो स्ट्रीम एपीआई कर्ल को प्रभावित नहीं करती है, तो आप इसे 'curl_setopt ($ हैंडल, CURLOPT_PROXY, $ proxy_url);' और ' आप दोनों का उपयोग करते हैं, आप दोनों दो जोड़ सकते हैं। –

0

कुछ स्क्रिप्ट के लिए दोनों file_get_contents के लिए काम करेंगे, तुम सब करने की ज़रूरत वातावरण चर HTTP_PROXY निर्धारित है। composer.phar और मीडिया-विकी के रखरखाव/update.php स्क्रिप्ट दोनों के लिए यह मामला था।

उदा .:

setenv HTTP_PROXY http://1.2.3.4:3934 

आपके प्रॉक्सी है 1.2.3.4 पर बंदरगाह 3934. पर सुन मेरे लिए काम किया।

0

हाँ यह संभव है!

आप फ़ाइल में stream_context_set_default कॉन्फ़िगर कर सकते हैं, और auto_prepend_file php.ini प्रॉपर्टी का उपयोग करके इस फ़ाइल को अपने सभी पीएचपी प्रोग्राम में शामिल कर सकते हैं।

https://gist.github.com/ebuildy/381f116e9cd18216a69188ce0230708d

और में फ्रेंच एक लेख:

मैं एक छोटे से सार के बारे में लिखा

https://medium.com/@thomasdecaux/param%C3%A9trer-par-d%C3%A9faut-un-proxy-pour-php-file-get-content-3e9a32416979#.6zbg605cx

इस तकनीक को 'कूल' है, क्योंकि, इस के लिए अपने सिस-व्यवस्थापक की अनुमति देता है होस्ट को कॉन्फ़िगर करें, इसलिए डेवलपर को कोड में कुछ भी बदलने की ज़रूरत नहीं है।

0

मैं इंटरनेट पर खोज की है और stream_context_set_default() एक पासवर्ड से सुरक्षित प्रॉक्सी सर्वर के बारे में कुछ भी नहीं मिला।

तब मैंने सोचा कि बुनियादी प्रमाणीकरण में पासवर्ड हेडर में भेजा जाता है। इसलिए मैंने हेडर को कर्ल अनुरोध से निकाले गए पासवर्ड से संशोधित किया और यह सही काम किया !!!

यहाँ है तुम कैसे करते:

सबसे पहले किसी भी डोमेन के इस अनुरोध को भेजने (example.com) नीचे के रूप में:

curl -v -U user:pass -x your_proxy_ip:port --url https://example.com 

देखें कर्ल हेडर भेजा है और मैं इन प्रॉक्सी लाइनों मिला बाद में उपयोग करने के लिए:

> Trying XXX.XXX.XXX.XXX... 
> Connected to XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX) port YYYY (#0) 
> Establish HTTP proxy tunnel to example.com:443 
> Proxy auth using Basic with user 'your_username_here' 
> CONNECT example.com:443 HTTP/1.1 
> Host: example.com:443 
> Proxy-Authorization: Basic YW1hem9uOnXXXXXXXXXXXXXXX25SMg 
> User-Agent: curl/7.47.0 
> Proxy-Connection: Keep-Alive 
> 
< HTTP/1.1 200 Connection established 
< 
< Proxy replied OK to CONNECT request 

ठीक अब यह समय है हमारे कस्टम हेडर के निर्माण के लिए:

$default_opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Proxy-Authorization: Basic YW1hem9uOnXXXXXXXXXXXXXXX25SMg\r\n" . 
       "Proxy-Connection: Keep-Alive", 
    'proxy'=>"XXX.XXX.XXX.XXX:YYYY" 
) 
); 

$default = stream_context_set_default($default_opts); 


$result = file_get_contents("https://ipleak.net/json/"); 
print_r(json_decode($result)); 

और यह सही काम करता है, आपको प्रतिक्रिया में अपने प्रॉक्सी सर्वर का आईपी मिलता है!

संबंधित मुद्दे