प्रॉक्सी के जरिए CURL का उपयोग कैसे करें?


128

मैं प्रॉक्सी सर्वर का उपयोग करने के लिए कर्ल सेट करना चाह रहा हूं। यूआरएल एक html फॉर्म द्वारा प्रदान किया गया है, जो कोई समस्या नहीं है। प्रॉक्सी के बिना यह ठीक काम करता है। मुझे इस और अन्य साइटों पर कोड मिला है, लेकिन वे काम नहीं करते हैं। सही समाधान खोजने में किसी भी मदद की बहुत सराहना की जाएगी। मुझे लगता है कि बंदी करीब हैं, लेकिन मुझे कुछ याद आ रहा है। धन्यवाद।

Bellow कोड मैंने यहाँ से अनुकूलित किया http://www.webmasterworld.com/forum88/10572.htm लेकिन यह लाइन 12 पर एक लापता T_VARIABLE के बारे में एक त्रुटि संदेश देता है।

<?

$url = '$_POST[1]';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, '66.96.200.39:80');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1)
curl_exec ($ch); 
$curl_info = curl_getinfo($ch);
curl_close($ch);
echo '<br />';
print_r($curl_info);
?>

प्रॉम्प्ट रिटर्न के माध्यम से bellow कर्ल से है कोई सामग्री नहीं

<?

$proxy = "66.96.200.39:80";
$proxy = explode(':', $proxy);
$url = "$_POST[1]";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]);
curl_setopt($ch, CURLOPT_HEADER, 1);

$exec = curl_exec($ch);

echo curl_error($ch);
print_r(curl_getinfo($ch));
echo $exec;
?>

वर्तमान में pelican-cement.com पर लाइव है, लेकिन यह भी काम नहीं करता है।

अद्यतन: आपकी सभी मदद के लिए धन्यवाद, मैंने उपरोक्त परिवर्तन किए हैं। अब यह केवल एक खाली स्क्रीन देता है।

<?

$url = $_POST['1'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, '66.96.200.39:80');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_exec ($ch); 
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;
?> 

3
आपको लाइन 12 पर एक अर्धविराम याद आ रहा है
Pekka

इसके अलावा, आपको $ url = '$ _POST [1]' को $ url = $ _POST [1] में बदलने की आवश्यकता है - अन्यथा, $ url आपके द्वारा इच्छित URL के बजाय एक स्ट्रिंग होगा
yoavmatchulsky

इसके अलावा, $ _POST सरणी की कुंजी एक स्ट्रिंग है जो पूर्णांक नहीं है, इसलिए आप यह कहना $_POST['1']
चाहेंगे

2
Pelican-cement.com पर फ़ॉर्म में "firstname" और "lastname" नाम के इनपुट हैं, लेकिन "1" नाम का कोई भी नहीं है।
जॉन फ्लैटनेस

2
@ user586011: कृपया नीचे दिए गए उत्तर के रूप में अपना समाधान जोड़ें और इसे स्वीकार करें। प्रश्न में समाधान मत डालो, यह अच्छी तरह से काम नहीं करता है।
हक्रे

जवाबों:


221

यहां आपके बग्स को हटा दिया गया है।

$url = 'http://dynupdate.no-ip.com/ip.php';
$proxy = '127.0.0.1:8888';
//$proxyauth = 'user:password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;

CURLOPT_PROXYUSERPWDयदि आपकी किसी भी प्रॉक्सी को उपयोगकर्ता नाम और पासवर्ड की आवश्यकता है, तो मैंने जोड़ा है। मैं CURLOPT_RETURNTRANSFER1 पर सेट करता हूं , ताकि डेटा $curl_scraped_pageचर पर वापस आ जाए ।

मैंने एक दूसरा अतिरिक्त हटा दिया curl_exec($ch);जो परिवर्तनशील लौटाया जा रहा है। मैंने एक सेटिंग में आपके प्रॉक्सी आईपी और पोर्ट को समेकित किया।

मैंने भी हटा दिया CURLOPT_HTTPPROXYTUNNELऔर CURLOPT_CUSTOMREQUESTचूंकि यह डिफ़ॉल्ट था।

यदि आप हेडर वापस नहीं चाहते हैं, तो टिप्पणी करें CURLOPT_HEADER

प्रॉक्सी को अक्षम करने के लिए बस इसे शून्य पर सेट करें।

curl_setopt($ch, CURLOPT_PROXY, null);

कोई भी प्रश्न पूछने के लिए स्वतंत्र महसूस करता हूं, मैं cURLहर दिन काम करता हूं ।


यह जानकर अच्छा लगा कि आप हर रोज CURL के साथ काम करते हैं। मैंने एक सॉक्स प्रॉक्सी सेट करने की कोशिश की और यह मेरे स्थानीय मशीन पर काम करता है लेकिन मेरे लिनक्स समर्पित सर्वर पर काम नहीं करता है। कोई उपाय ?
कोडिंग_डॉट

@coding_idiot अधिकांश वेब ब्लॉक पोर्ट को होस्ट करते हैं जो सुरक्षा कारणों से 80 या 443 नहीं हैं।
सूसदेव

मैंने हालांकि इसे पहले ही हल कर लिया था। मुझे यकीन है कि अन्य लोग इससे लाभान्वित होंगे।
कोडिंग_डॉट

@GravyCode: यदि हम उस मामले में कुछ सेवाओं से प्रॉक्सी प्राप्त करते हैं, तो क्या मुझे उपयोगकर्ता नाम / पासवर्ड पारित करने की आवश्यकता है?
प्रग्नेश चौहान

1
मुझे कैसे पता होना चाहिए कि क्या प्रॉक्सी पोर्ट वेबहोस्ट द्वारा ब्लॉक किया गया है?
user1788736

35

मैंने CURL PROXY के लिए आवश्यक विभिन्न CURL विकल्पों के उपयोग के बारे में बताया है।

$url = 'http://dynupdate.no-ip.com/ip.php';
$proxy = '127.0.0.1:8888';
$proxyauth = 'user:password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);         // URL for CURL call
curl_setopt($ch, CURLOPT_PROXY, $proxy);     // PROXY details with port
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);   // Use if proxy have username and password
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // If expected to call with specific PROXY type
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  // If url has redirects then go to the final redirected URL.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);  // Do not outputting it out directly on screen.
curl_setopt($ch, CURLOPT_HEADER, 1);   // If you want Header information of response else make 0
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;

3
ये टिप्पणियां सहायक हैं, लेकिन दूसरों को ध्यान देना चाहिए कि अतिरिक्त विकल्पों की वास्तव में आवश्यकता नहीं है
नैट

-1

यहाँ एक अच्छी तरह से परीक्षण किया गया कार्य है जो मैंने अपनी परियोजनाओं के लिए विस्तृत आत्म व्याख्यात्मक टिप्पणियों के साथ उपयोग किया है


कई बार जब सर्वर फ़ायरवॉल द्वारा 80 के अलावा अन्य पोर्ट्स को ब्लॉक किया जाता है, तो कोड लोकलहोस्ट पर ठीक काम करता प्रतीत होता है, लेकिन सर्वर पर नहीं

function get_page($url){

global $proxy;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_HEADER, 0); // return headers 0 no 1 yes
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // return page 1:yes
curl_setopt($ch, CURLOPT_TIMEOUT, 200); // http request timeout 20 seconds
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Follow redirects, need this if the url changes
curl_setopt($ch, CURLOPT_MAXREDIRS, 2); //if http server gives redirection responce
curl_setopt($ch, CURLOPT_USERAGENT,
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); // cookies storage / here the changes have been made
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // false for https
curl_setopt($ch, CURLOPT_ENCODING, "gzip"); // the page encoding

$data = curl_exec($ch); // execute the http request
curl_close($ch); // close the connection
return $data;
}

1
इससे मुझे मदद मिली: कर्ल_सेटॉप ($ ch, CURLOPT_SSL_VERIFYPEER, गलत); // झूठे के लिए https
villamejia

1
@villamejia खबरदार, हालांकि, CURLOPT_SSL_VERIFYPEER = झूठ का उपयोग करने में। इसका मतलब यह है कि https सर्वर से कनेक्ट होने पर cURL कोई भी सर्टिफिकेट चेक नहीं करता है, इस प्रकार कनेक्शन को संभावित मैन-इन-द-मिडल हमले के लिए असुरक्षित बना देता है - इसलिए डेटा सुरक्षा की गारंटी नहीं दी जाती है। बेहतर रूट CURLOPT_CAPATH का उपयोग वैध रूट प्रमाणीकरण प्राधिकरण ( /etc/ssl/certsउदाहरण के लिए डेबियन / उबंटू पर) का एक सेट देने के लिए करें
अले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.