2011-06-08 20 views
5

मैं किसी वेबसाइट पर प्रमाण-पत्र पास करने का प्रयास कर रहा हूं, इसलिए मैं कुछ डेटा निकालने के लिए file_get_contents का उपयोग कर सकता हूं लेकिन यह काम नहीं कर रहा है, मुझे एक खाली पृष्ठ मिल रहा है, इसलिए कोई विचार क्या गलत है?उत्तीर्ण प्रमाण-पत्र

<?php 


$username="[email protected]"; 
$password="Koin"; 

$url="confluence.rogersdigitalmedia.com"; 


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
$output = curl_exec($ch); 
$info = curl_getinfo($ch); 
curl_close($ch); 

$str= file_get_contents("confluence.rogersdigitalmedia.com/display/prodsupport/Team+Calendar"); 
echo $str; 
?> 

यहाँ नए कोड यह अभी भी लॉगिन स्क्रीन जब मैं सामग्री मिलता है पर काम नहीं कर अटक गया है है .... screenshot

<?php 
$username="[email protected]"; 
$password="Koin"; 

$url="confluence.rogersdigitalmedia.com"; 


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 


//Replaced due to special chars in url for username and pass 
//curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
curl_setopt($ch, CURLOPT_USERPWD, urlencode($username) . ':' . urlencode($password)); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
$output = curl_exec($ch); 
$info = curl_getinfo($ch); 
curl_close($ch); 

echo file_get_contents('http://confluence.rogersdigitalmedia.com/exportword?pageId=1114407'); 
?> 

नए कोड: मुझे पता है $url जिसके लिए यूआरएल है मैं लॉगिन करना है, लेकिन मैं $data में क्या डालूं? मुझे पता है कि यह मेरी लॉगिन जानकारी है, लेकिन मैं इसे कैसे रखूं (उदा।, < उपयोगकर्ता नाम> स्थान < पासवर्ड>)?

<?php 
function do_post_request($url, $data, $optional_headers = null) 
{ 
    $params = array('http' => array(
       'method' => 'POST', 
       'content' => $data 
      )); 
    if ($optional_headers !== null) { 
    $params['http']['header'] = $optional_headers; 
    } 
    $ctx = stream_context_create($params); 
    $fp = @fopen($url, 'rb', false, $ctx); 
    if (!$fp) { 
    throw new Exception("Problem with $url, $php_errormsg"); 
    } 
    $response = @stream_get_contents($fp); 
    if ($response === false) { 
    throw new Exception("Problem reading data from $url, $php_errormsg"); 
    } 
    return $response; 
} 
+1

HTTP प्रतिक्रिया शीर्षलेख कैसा दिखते हैं? सर्वर से आप किस स्थिति से वापस आते हैं? –

उत्तर

4

आप शायद उपयोगकर्ता नाम में @ से बचने के लिए की जरूरत है:

curl_setopt($ch, CURLOPT_USERPWD, urlencode($username) . ':' . urlencode($password)); 

इसका कारण यह है (जैसे @ और : के रूप में) कुछ वर्ण URL में विशेष अर्थ है। आपको उनसे बचने की ज़रूरत है ताकि HTTP अनुरोध के बारे में कुछ इंगित करने के बजाय सर्वर उन्हें पात्रों के रूप में व्यवहार करेगा।

वह सब स्क्रैप करें। आपके संपादन से पता चलता है कि HTTP के काम करने के बारे में आपको एक मौलिक गलतफहमी है। आप उस साइट पर HTTP लॉगिन प्रमाण-पत्र पास करने के लिए कर्ल का उपयोग नहीं कर सकते हैं, जो किसी वेब फ़ॉर्म को भरने की अपेक्षा करता है और फिर file_get_contents (जो एक पूरी तरह से अलग API का हिस्सा है) के साथ लॉग इन करने में सक्षम होने की उम्मीद करता है।

इस तथ्य के संदर्भ में कि आप वास्तव में ऐसा कैसे करते हैं ... सबसे पहले, पता लगाएं कि साइट में एपीआई है या नहीं। यदि ऐसा नहीं होता है, तो पता लगाएं कि वे वास्तव में आपको स्क्रीन-स्क्रैपिंग करना चाहते हैं या नहीं। यह बहुत एक वेबसाइट को स्क्रीन-स्क्रैप करने के लिए खराब फॉर्म होगा जो इसकी अनुमति नहीं देता है। यह वास्तव में कॉपीराइट कानून का उल्लंघन हो सकता है।

दूसरा, एपीआई के लिए कार्यक्रम। इसका मतलब यह है कि साइट जिस तरह से लागू होती है उसमें लॉग इन करना। यह फॉर्म वैल्यू के साथ होगा (जिसे आपको शायद CURLOPT_POSTFIELDS में भेजना होगा) और कुकीज (जिसे आपको प्रत्येक अनुरोध में उपयोग करने की आवश्यकता होगी, शायद CURLOPT_COOKIEFILE का उपयोग कर)।

क्लाइंट-सर्वर संबंध कैसे काम करता है, एपीआई का अध्ययन करता है और समस्या पर चक कोड न केवल काम करता है और इसे काम करने की उम्मीद करता है।

+1

मैं @ के बिना लॉगिन नहीं कर सकता क्योंकि जब तक कि मैं अपने नाम के बाद पूरा @ ring.gil.com टाइप नहीं करता हूं, यह मुझे लॉगिन करने की अनुमति नहीं देता है इसलिए ... मुझे क्या कर सकता है? संपादित करें: धन्यवाद बीमार इसे आज़माएं। – Bulvak

+0

आपको * मूल्य * से बचने की आवश्यकता है, ताकि सर्वर को यह एहसास हो कि '@' वर्ण उपयोगकर्ता नाम का हिस्सा है। यदि आप इसे एन्कोड नहीं करते हैं, तो सर्वर सोचता है कि उपयोगकर्ता नाम 'ओख' है और सर्वर 'ring.gil.com है: कोइन @ confluence.rogersdigitalmedia.com'। – lonesomeday

+1

अब यह कैसे है? मैंने इसे जिस तरह से कहा था (जैसे कम से कम मुझे लगता है कि अगर मैंने गलत किया है तो कृपया मुझे सही करें) और मुझे अभी भी एक ही लॉगिन स्क्रीन मिलती है – Bulvak

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