दिलचस्प पोस्ट
समूह द्वारा गिनती और गिनती के साथ स्वत: कार्यान्वित गेटर्स और सेटर्स बनाम सार्वजनिक क्षेत्र कैसे एक MySQL पदानुक्रमित पुनरावर्ती क्वेरी बनाने के लिए जावास्क्रिप्ट फ़ंक्शन संदर्भ गलत एक स्ट्रिंग को क्लास नाम में परिवर्तित करना घुमाओ पर एक छवि स्पिन या घुमाएं एंड्रॉइड: वर्तमान फ़ोरोग्राफ़ गतिविधि (सेवा से) कैसे प्राप्त कर सकता हूं? मैं प्रोग्रामैटिक रूप से यह निर्धारित कैसे कर सकता हूं कि मेरा ऐप iPhone सिम्युलेटर में चल रहा है या नहीं? सरणी में अंतिम कुंजी कैसे प्राप्त करें? एंड्रॉइड – पाठ पर छाया? मैं iPhone पर प्रोग्राम को एक छवि कैसे दिखाऊंगा? सर्कल-सर्कल टकराव स्विफ्ट के लिए UITableView उदाहरण त्रुटि प्राप्त हो रही है: क्लास 'android.app.AppOpsManager' नहीं पायी जा सकती, जिसका उपयोग विधि com.google.android.gms.common.GooglePlayServicesUtil.zza नेटबीन्स जीयूआई बिल्डर के साथ कार्डलेआउट का उपयोग कैसे करें

कर्ल और PHP के साथ सत्र को जीवित रखना

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

http://api.example.com/login/<username>/<password> 

लॉगिन करने के लिए और फिर उपयोगकर्ता विवरण देखने के लिए निम्नलिखित:

 http://api.example.com/user/ 

यह सब वेब ब्राउज़र में काम करता है हालांकि एक बार मैं कर्ल का उपयोग करने की कोशिश करता हूं, लॉगिन ठीक काम करता है, लेकिन जब उपयोगकर्ता विवरण देखने का प्रयास करते हैं, तो मुझे एक 401 अनधिकृत त्रुटि मिलती है। मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि कर्ल सत्र कुकीज़ को ठीक से नहीं सहेज रहा है? क्या कोई बताता है कि वह काम क्यों नहीं कर रहा है और इसे कैसे तय किया जाए? मैंने स्टैक एक्सचेंज की खोज करने की कोशिश की है, हालांकि मैंने जो भी समाधान की कोशिश की है, वह मेरी स्थिति के लिए काम करती है। मैं अंत बिंदुओं को कर्ल करने के लिए उपयोग कर रहा हूँ जो कोड नीचे दिखाया गया है I धन्यवाद!

 define("COOKIE_FILE", "cookie.txt"); // Login the user $ch = curl_init('http://api.example.com/login/joe/smith'); curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); echo curl_exec ($ch); // Read the session saved in the cookie file echo "<br/><br/>"; $file = fopen("cookie.txt", 'r'); echo fread($file, 100000000); echo "<br/><br/>"; // Get the users details $ch = curl_init('http://api.example.com/user'); curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); echo curl_exec ($ch); 

यह कोड आउटपुट देगा:

 HTTP/1.1 200 OK Date: Mon, 22 Oct 2012 21:23:57 GMT Server: LiteSpeed Connection: close X-Powered-By: PHP/5.3.14 Set-Cookie: cfapi=f481129c9616b8f69cc36afe16466545; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Type: application/json X-Powered-By: CFWAPI 0.1a Content-Length: 46 {"status":200,"msg":"Successfully Logged In."} # Netscape HTTP Cookie File # http://curl.haxx.se/rfc/cookie_spec.html # This file was generated by libcurl! Edit at your own risk. api.example.com FALSE / FALSE 0 cfapi 94f63b07ccf7e34358c1c922341c020f HTTP/1.1 401 Unauthorized Date: Mon, 22 Oct 2012 21:23:57 GMT Server: LiteSpeed Connection: close X-Powered-By: PHP/5.3.14 Set-Cookie: cfapi=a8eb015a7c423dde95aa01579c4729a4; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Type: application/json X-Powered-By: CFWAPI 0.1a Content-Length: 49 {"status":401, "msg":"You need to login first!"} 

Solutions Collecting From Web of "कर्ल और PHP के साथ सत्र को जीवित रखना"

आपको CURLOPT_COOKIEFILE विकल्प भी सेट करना CURLOPT_COOKIEFILE

मैनुअल इस रूप में वर्णन करता है

कुकी डेटा युक्त फ़ाइल का नाम। कुकी फ़ाइल नेटस्केप प्रारूप में हो सकती है, या सिर्फ साइड एचटीटी-स्टाइल हेडर एक फाइल में फेंक दिया गया है। यदि नाम एक रिक्त स्ट्रिंग है, तो कोई कुकी लोड नहीं की जाती है, लेकिन कुकी हैंडलिंग अभी भी सक्षम है।

चूंकि आप कुकी जार का उपयोग कर रहे हैं, जब आप अनुरोध समाप्त करते हैं तो कुकी को सहेजते हैं, लेकिन चूंकि CURLOPT_COOKIEFILE नहीं दिया गया है, cURL आगामी अनुरोधों पर सहेजे गए किसी भी कुकी को नहीं भेज रहा है।

आपने सही तरीके से "CURLOPT_COOKIEJAR" (लेखन) का उपयोग किया है लेकिन आपको "CURLOPT_COOKIEFILE" (रीडिंग) सेट करने की आवश्यकता है

 curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE); curl_setopt ($ch, CURLOPT_COOKIEFILE, COOKIE_FILE); 

इस तरह आप सत्रों के साथ कर्ल करते हैं

 //initial request with login data $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.php'); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, "username=XXXXX&password=XXXXX"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIESESSION, true); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie-name'); //could be empty, but cause problems on some hosts curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/ip4.x/file/tmp'); //could be empty, but cause problems on some hosts $answer = curl_exec($ch); if (curl_error($ch)) { echo curl_error($ch); } //another request preserving the session curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/profile'); curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_POSTFIELDS, ""); $answer = curl_exec($ch); if (curl_error($ch)) { echo curl_error($ch); } 

मैंने इसे इंप्रेस पेज पर देखा है

हां, जिसे अक्सर 'कुकी जार' कहा जाता है Google को कई उदाहरण देना चाहिए:

http://devzone.zend.com/16/php-101-part-10-a-session-in-the-cookie-jar/

http://curl.haxx.se/libcurl/php/examples/cookiejar.html <- अच्छा उदाहरण IMHO

उस अंतिम एक को यहाँ कॉपी कर रहा है, इसलिए वह दूर नहीं जाती …

एक पृष्ठ पर लॉग इन करें और फिर पहले पृष्ठ से सभी कुकीज को पास करने वाला एक और पृष्ठ प्राप्त करें मिशेल द्वारा लिखित

 <?php /* This script is an example of using curl in php to log into on one page and then get another page passing all cookies from the first page along with you. If this script was a bit more advanced it might trick the server into thinking its netscape and even pass a fake referer, yo look like it surfed from a local page. */ $ch = curl_init(); curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookieFileName"); curl_setopt($ch, CURLOPT_URL,"http://www.myterminal.com/checkpwd.asp"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "UserID=username&password=passwd"); ob_start(); // prevent any output curl_exec ($ch); // execute the curl command ob_end_clean(); // stop preventing output curl_close ($ch); unset($ch); $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookieFileName"); curl_setopt($ch, CURLOPT_URL,"http://www.myterminal.com/list.asp"); $buf2 = curl_exec ($ch); curl_close ($ch); echo "<PRE>".htmlentities($buf2); ?>