पायथन 3 - सीजीआई प्रोग्रामिंग

कॉमन गेटवे इंटरफेस या सीजीआई, मानकों का एक सेट है जो यह परिभाषित करता है कि वेब सर्वर और कस्टम स्क्रिप्ट के बीच सूचनाओं का आदान-प्रदान कैसे किया जाता है। वर्तमान में सीजीआई चश्मा एनसीएसए द्वारा बनाए रखा जाता है।

CGI क्या है?

  • कॉमन गेटवे इंटरफ़ेस या CGI, बाहरी सर्वर के लिए एक मानक है जो HTTP सर्वर जैसे सूचना सर्वर के साथ इंटरफेस करता है।

  • वर्तमान संस्करण CGI / 1.1 है और CGI / 1.2 प्रगति पर है।

वेब ब्राउज़िंग

CGI की अवधारणा को समझने के लिए, आइए देखें कि जब हम किसी विशेष वेब पेज या URL को ब्राउज़ करने के लिए हाइपर लिंक पर क्लिक करते हैं तो क्या होता है।

  • आपका ब्राउज़र HTTP वेब सर्वर से संपर्क करता है और URL के लिए मांग करता है, अर्थात फ़ाइल नाम।

  • वेब सर्वर URL को पार्स करता है और फ़ाइल नाम के लिए देखता है। यदि यह उस फ़ाइल को ढूंढता है तो उसे ब्राउज़र में वापस भेज देता है, अन्यथा एक त्रुटि संदेश भेजता है जो बताता है कि आपने गलत फ़ाइल का अनुरोध किया है।

  • वेब ब्राउज़र वेब सर्वर से प्रतिक्रिया लेता है और प्राप्त फ़ाइल या त्रुटि संदेश को प्रदर्शित करता है।

हालाँकि, HTTP सर्वर को सेट करना संभव है ताकि जब भी किसी निश्चित निर्देशिका में किसी फ़ाइल का अनुरोध किया जाए तो वह फ़ाइल वापस नहीं भेजी जाए; इसके बजाय इसे एक प्रोग्राम के रूप में निष्पादित किया जाता है, और जो भी प्रोग्राम आउटपुट को प्रदर्शित करने के लिए आपके ब्राउज़र के लिए वापस भेजा जाता है। इस फ़ंक्शन को कॉमन गेटवे इंटरफ़ेस या CGI कहा जाता है और कार्यक्रमों को CGI स्क्रिप्ट कहा जाता है। ये CGI प्रोग्राम एक पायथन स्क्रिप्ट, पेरेल स्क्रिप्ट, शेल स्क्रिप्ट, C या C ++ प्रोग्राम आदि हो सकते हैं।

CGI आर्किटेक्चर आरेख

वेब सर्वर समर्थन और विन्यास

इससे पहले कि आप CGI प्रोग्रामिंग के साथ आगे बढ़ें, सुनिश्चित करें कि आपका वेब सर्वर CGI का समर्थन करता है और CGI प्रोग्राम को संभालने के लिए इसे कॉन्फ़िगर किया गया है। HTTP सर्वर द्वारा निष्पादित किए जाने वाले सभी CGI प्रोग्राम को पूर्व-कॉन्फ़िगर निर्देशिका में रखा जाता है। इस निर्देशिका को CGI निर्देशिका कहा जाता है और सम्मेलन द्वारा इसे / var / www / cgi-bin नाम दिया गया है। कन्वेंशन द्वारा, सीजीआई फाइलों का विस्तार है।cgi, लेकिन आप अपनी फाइलों को अजगर विस्तार के साथ रख सकते हैं .py भी।

डिफ़ॉल्ट रूप से, लिनक्स सर्वर को केवल cgi-bin निर्देशिका में / var / www में स्क्रिप्ट को चलाने के लिए कॉन्फ़िगर किया गया है। यदि आप अपनी CGI स्क्रिप्ट को चलाने के लिए किसी अन्य निर्देशिका को निर्दिष्ट करना चाहते हैं, तो httpd.conf फ़ाइल में निम्न पंक्तियों पर टिप्पणी करें -

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>

<Directory "/var/www/cgi-bin">
Options All
</Directory>

यहां, हम यह मानते हैं कि आपके पास वेब सर्वर है और सफलतापूर्वक चल रहा है और आप किसी अन्य CGI प्रोग्राम जैसे पर्ल या शेल आदि को चलाने में सक्षम हैं।

पहला सीजीआई कार्यक्रम

यहाँ एक सरल लिंक दिया गया है, जो एक CGI स्क्रिप्ट से जुड़ा है जिसे hello.py कहा जाता है । इस फ़ाइल को / var / www / cgi-bin डायरेक्टरी में रखा गया है और इसमें निम्नलिखित सामग्री है। अपने CGI प्रोग्राम को चलाने से पहले, सुनिश्चित करें कि आपके पास उपयोग करने वाली फ़ाइल का परिवर्तन मोड हैchmod 755 hello.py फ़ाइल निष्पादन योग्य बनाने के लिए UNIX कमांड।

#!/usr/bin/python

print ("Content-type:text/html\r\n\r\n")
print ('<html>')
print ('<head>')
print ('<title>Hello Word - First CGI Program</title>')
print ('</head>')
print ('<body>')
print ('<h2>Hello Word! This is my first CGI program</h2>')
print ('</body>')
print ('</html>')

Note- स्क्रिप्ट में पहली पंक्ति अजगर निष्पादन योग्य के लिए रास्ता होना चाहिए। लिनक्स में यह #! / Usr / bin / python3 होना चाहिए

Yor ब्राउज़र में निम्न URL दर्ज करें

http://localhost:8080/cgi-bin/hello.py

Hello Word! This is my first CGI program

यह hello.py स्क्रिप्ट एक साधारण पायथन स्क्रिप्ट है, जो STDOUT फ़ाइल, यानी स्क्रीन पर अपना आउटपुट लिखती है। एक महत्वपूर्ण और अतिरिक्त सुविधा उपलब्ध है जिसे मुद्रित करना पहली पंक्ति हैContent-type:text/html\r\n\r\n। यह लाइन ब्राउज़र को वापस भेज दी जाती है और यह ब्राउज़र स्क्रीन पर प्रदर्शित होने वाली सामग्री प्रकार को निर्दिष्ट करती है।

अब तक आप CGI की मूल अवधारणा को समझ गए होंगे और आप Python का उपयोग करके कई जटिल CGI प्रोग्राम लिख सकते हैं। यह स्क्रिप्ट किसी अन्य बाहरी सिस्टम के साथ भी बातचीत कर सकती है जैसे RDBMS जैसी जानकारी का आदान-प्रदान करना।

HTTP हैडर

रेखा Content-type:text/html\r\n\r\nHTTP हेडर का एक हिस्सा है जो सामग्री को समझने के लिए ब्राउज़र को भेजा जाता है। सभी HTTP शीर्ष लेख निम्नलिखित रूप में होंगे -

HTTP Field Name: Field Content

For Example
Content-type: text/html\r\n\r\n

कुछ अन्य महत्वपूर्ण HTTP हेडर हैं, जिन्हें आप अपने CGI प्रोग्रामिंग में अक्सर उपयोग करेंगे।

अनु क्रमांक। हेडर और विवरण
1

Content-type:

फ़ाइल के प्रारूप को परिभाषित करने वाला MIME स्ट्रिंग वापस किया जा रहा है। उदाहरण सामग्री-प्रकार: पाठ / html है

2

Expires: Date

जानकारी अमान्य होने की तिथि। इसका उपयोग ब्राउज़र द्वारा यह तय करने के लिए किया जाता है कि किसी पृष्ठ को ताज़ा करने की आवश्यकता कब है। एक मान्य दिनांक स्ट्रिंग प्रारूप 01 जनवरी 1998 12:00:00 GMT में है।

3

Location: URL

URL जो अनुरोध किए गए URL के बजाय लौटाया गया है। आप किसी भी फ़ाइल के अनुरोध को पुनर्निर्देशित करने के लिए इस फ़ील्ड का उपयोग कर सकते हैं।

4

Last-modified: Date

संसाधन के अंतिम संशोधन की तारीख।

5

Content-length: N

डेटा को लौटाए जाने की लंबाई, बाइट्स में। फ़ाइल के लिए अनुमानित डाउनलोड समय की रिपोर्ट करने के लिए ब्राउज़र इस मान का उपयोग करता है।

6

Set-Cookie: String

कुकी स्ट्रिंग के माध्यम से पारित सेट करें

CGI पर्यावरण चर

सभी सीजीआई कार्यक्रमों में निम्नलिखित पर्यावरण चर तक पहुंच है। ये चर किसी भी CGI प्रोग्राम को लिखते समय एक महत्वपूर्ण भूमिका निभाते हैं।

अनु क्रमांक। परिवर्तनीय नाम और विवरण
1

CONTENT_TYPE

सामग्री का डेटा प्रकार। उपयोग किया जाता है जब क्लाइंट सर्वर से जुड़ी सामग्री भेज रहा है। उदाहरण के लिए, फ़ाइल अपलोड करें।

2

CONTENT_LENGTH

क्वेरी जानकारी की लंबाई। यह केवल POST अनुरोधों के लिए उपलब्ध है।

3

HTTP_COOKIE

कुंजी और मूल्य जोड़ी के रूप में सेट कुकीज़ लौटाता है।

4

HTTP_USER_AGENT

उपयोगकर्ता-एजेंट अनुरोध-हेडर फ़ील्ड में अनुरोध को उत्पन्न करने वाले उपयोगकर्ता एजेंट के बारे में जानकारी होती है। यह वेब ब्राउज़र का नाम है।

5

PATH_INFO

CGI स्क्रिप्ट के लिए पथ।

6

QUERY_STRING

GET विधि अनुरोध के साथ भेजी गई URL-एन्कोडेड जानकारी।

7

REMOTE_ADDR

अनुरोध करने वाले दूरस्थ होस्ट का IP पता। यह उपयोगी लॉगिंग या प्रमाणीकरण के लिए है।

8

REMOTE_HOST

अनुरोध करने वाले मेजबान का पूरी तरह से योग्य नाम। यदि यह जानकारी उपलब्ध नहीं है, तो IR पता प्राप्त करने के लिए REMOTE_ADDR का उपयोग किया जा सकता है।

9

REQUEST_METHOD

अनुरोध करने के लिए उपयोग की जाने वाली विधि। सबसे आम तरीके GET और POST हैं।

10

SCRIPT_FILENAME

CGI स्क्रिप्ट का पूरा रास्ता।

1 1

SCRIPT_NAME

CGI लिपि का नाम।

12

SERVER_NAME

सर्वर का होस्टनाम या आईपी एड्रेस

13

SERVER_SOFTWARE

सर्वर पर चल रहे सॉफ़्टवेयर का नाम और संस्करण।

यहाँ सभी CGI चर को सूचीबद्ध करने के लिए छोटा CGI कार्यक्रम है। परिणाम प्राप्त करें पर्यावरण देखने के लिए इस लिंक पर क्लिक करें

#!/usr/bin/python

import os

print ("Content-type: text/html\r\n\r\n");
print ("<font size=+1>Environment</font><\br>");
for param in os.environ.keys():
   print ("<b>%20s</b>: %s<\br>" % (param, os.environ[param]))

GET और POST के तरीके

जब आप अपने ब्राउज़र से वेब सर्वर और अंततः अपने CGI प्रोग्राम के लिए कुछ जानकारी पास करने की आवश्यकता होती है, तो आप कई स्थितियों में आ गए होंगे। सबसे अधिक बार, ब्राउज़र दो तरीकों का उपयोग करता है दो इस जानकारी को वेब सर्वर से पास करते हैं। ये तरीके हैं GET मेथड और POST मेथड।

जीईटी पद्धति का उपयोग करके सूचना पास करना

GET विधि पेज अनुरोध के लिए संलग्न एन्कोडेड उपयोगकर्ता जानकारी भेजता है। पृष्ठ और एन्कोडेड जानकारी को किसके द्वारा अलग किया जाता है? चरित्र इस प्रकार है -

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2
  • जीईटी विधि ब्राउज़र से वेब सर्वर तक जानकारी पारित करने के लिए डिफ़ॉल्ट विधि है और यह आपके ब्राउज़र के स्थान बॉक्स में दिखाई देने वाली एक लंबी स्ट्रिंग का उत्पादन करती है।

  • यदि आपके पास सर्वर के पास जाने के लिए पासवर्ड या अन्य संवेदनशील जानकारी है तो कभी भी GET विधि का उपयोग न करें।

  • GET विधि का आकार सीमा है: केवल 1024 वर्णों को अनुरोध स्ट्रिंग में भेजा जा सकता है।

  • GET विधि QUERY_STRING हेडर का उपयोग करके जानकारी भेजता है और आपके CGI प्रोग्राम में QUERY_STRING पर्यावरण चर के माध्यम से सुलभ होगी।

आप किसी भी URL के साथ केवल कुंजी और मूल्य जोड़े को संक्षिप्त करके जानकारी पास कर सकते हैं या आप GET पद्धति का उपयोग करके जानकारी पास करने के लिए HTML <FORM> टैग का उपयोग कर सकते हैं।

सरल URL उदाहरण: विधि प्राप्त करें

यहां एक सरल URL है, जो GET विधि का उपयोग करके hello_get.py प्रोग्राम में दो मान पास करता है।

/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI

नीचे है hello_get.pyवेब ब्राउज़र द्वारा दिए गए इनपुट को संभालने के लिए स्क्रिप्ट। हम उपयोग करने जा रहे हैंcgi मॉड्यूल, जो उत्तीर्ण जानकारी तक पहुंचना बहुत आसान बनाता है -

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print ("Content-type:text/html\r\n\r\n")
print ("<html>")
print ("<head>")
print ("<title>Hello - Second CGI Program</title>")
print ("</head>")
print ("<body>")
print ("<h2>Hello %s %s</h2>" % (first_name, last_name))
print ("</body>")
print ("</html>")

यह निम्नलिखित परिणाम उत्पन्न करेगा -

Hello ZARA ALI

सरल फार्म उदाहरण: विधि प्राप्त करें

यह उदाहरण HTML FORM और सबमिट बटन का उपयोग करके दो मान पास करता है। हम इस इनपुट को संभालने के लिए उसी CGI स्क्रिप्ट hello_get.py का उपयोग करते हैं।

<form action = "/cgi-bin/hello_get.py" method = "get">
   First Name: <input type = "text" name = "first_name">  <br />

   Last Name: <input type = "text" name = "last_name" />
   <input type = "submit" value = "Submit" />
</form>

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

POST विधि का उपयोग करके जानकारी पास करना

एक CGI प्रोग्राम को सूचना देने का एक आम तौर पर अधिक विश्वसनीय तरीका POST विधि है। यह सूचना को GET विधियों की तरह ही पैकेज करता है, लेकिन एक के बाद एक पाठ स्ट्रिंग के रूप में भेजने के बजाय? URL में यह इसे एक अलग संदेश के रूप में भेजता है। यह संदेश मानक इनपुट के रूप में CGI स्क्रिप्ट में आता है।

नीचे एक ही hello_get.py स्क्रिप्ट है जो GET और साथ ही POST विधि को संभालती है।

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

चलिए फिर से एक ही उदाहरण लेते हैं जो ऊपर दिया गया है जो HTML FORM और सबमिट बटन का उपयोग करके दो मान देता है। हम इस इनपुट को संभालने के लिए उसी CGI स्क्रिप्ट hello_get.py का उपयोग करते हैं।

<form action = "/cgi-bin/hello_get.py" method = "post">
First Name: <input type = "text" name = "first_name"><br />
Last Name: <input type = "text" name = "last_name" />

<input type = "submit" value = "Submit" />
</form>

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

सीजीआई प्रोग्राम को चेकबॉक्स डेटा पास करना

चेकबॉक्स का उपयोग तब किया जाता है जब एक से अधिक विकल्प का चयन करना आवश्यक होता है।

यहाँ दो चेकबॉक्स के साथ एक फॉर्म के लिए उदाहरण के लिए HTML कोड है -

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
   <input type = "checkbox" name = "maths" value = "on" /> Maths
   <input type = "checkbox" name = "physics" value = "on" /> Physics
   <input type = "submit" value = "Select Subject" />
</form>

इस कोड का परिणाम निम्न रूप है -

चेकबॉक्स बटन के लिए वेब ब्राउज़र द्वारा दिए गए इनपुट को संभालने के लिए नीचे checkbox.cgi स्क्रिप्ट है।

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('maths'):
   math_flag = "ON"
else:
   math_flag = "OFF"

if form.getvalue('physics'):
   physics_flag = "ON"
else:
   physics_flag = "OFF"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Checkbox - Third CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> CheckBox Maths is : %s</h2>" % math_flag
print "<h2> CheckBox Physics is : %s</h2>" % physics_flag
print "</body>"
print "</html>"

CGI प्रोग्राम को रेडियो बटन डेटा पास करना

रेडियो बटन का उपयोग तब किया जाता है जब केवल एक विकल्प का चयन करना आवश्यक होता है।

यहाँ दो रेडियो बटन के साथ एक फार्म के लिए उदाहरण के लिए HTML कोड है -

<form action = "/cgi-bin/radiobutton.py" method = "post" target = "_blank">
   <input type = "radio" name = "subject" value = "maths" /> Maths
   <input type = "radio" name = "subject" value = "physics" /> Physics
   <input type = "submit" value = "Select Subject" />
</form>

इस कोड का परिणाम निम्न रूप है -

नीचे रेडियो बटन के लिए वेब ब्राउज़र द्वारा दिए गए इनपुट को संभालने के लिए radiobutton.py स्क्रिप्ट है -

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('subject'):
   subject = form.getvalue('subject')
else:
   subject = "Not set"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Radio - Fourth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"

CGI प्रोग्राम के लिए पाठ क्षेत्र डेटा पास करना

TEXTAREA तत्व का उपयोग तब किया जाता है जब बहुस्तरीय पाठ को CGI प्रोग्राम को पास करना होता है।

TEXTAREA बॉक्स के साथ फ़ॉर्म के लिए उदाहरण HTML कोड है -

<form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">
   <textarea name = "textcontent" cols = "40" rows = "4">
      Type your text here...
   </textarea>
   <input type = "submit" value = "Submit" />
</form>

इस कोड का परिणाम निम्न रूप है -

नीचे वेब ब्राउज़र द्वारा दिए गए इनपुट को संभालने के लिए textarea.cgi स्क्रिप्ट है -

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('textcontent'):
   text_content = form.getvalue('textcontent')
else:
   text_content = "Not entered"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>";
print "<title>Text Area - Fifth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Entered Text Content is %s</h2>" % text_content
print "</body>"

CGI प्रोग्राम के लिए ड्रॉप डाउन बॉक्स डेटा पास करना

ड्रॉप डाउन बॉक्स का उपयोग तब किया जाता है जब हमारे पास कई विकल्प उपलब्ध होते हैं लेकिन केवल एक या दो का चयन किया जाएगा।

यहाँ एक ड्रॉप डाउन बॉक्स के साथ एक फॉर्म के लिए उदाहरण के लिए HTML कोड है -

<form action = "/cgi-bin/dropdown.py" method = "post" target = "_blank">
   <select name = "dropdown">
      <option value = "Maths" selected>Maths</option>
      <option value = "Physics">Physics</option>
   </select>
   <input type = "submit" value = "Submit"/>
</form>

इस कोड का परिणाम निम्न रूप है -

नीचे वेब ब्राउज़र द्वारा दिए गए इनपुट को संभालने के लिए ड्रॉपडाउन एरो स्क्रिप्ट है।

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('dropdown'):
   subject = form.getvalue('dropdown')
else:
   subject = "Not entered"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Dropdown Box - Sixth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"

CGI में कुकीज़ का उपयोग करना

HTTP प्रोटोकॉल एक स्टेटलेस प्रोटोकॉल है। एक वाणिज्यिक वेबसाइट के लिए, विभिन्न पृष्ठों के बीच सत्र की जानकारी को बनाए रखना आवश्यक है। उदाहरण के लिए, एक उपयोगकर्ता पंजीकरण कई पृष्ठों को पूरा करने के बाद समाप्त होता है। सभी वेब पृष्ठों पर उपयोगकर्ता की सत्र जानकारी कैसे बनाए रखें?

कई परिस्थितियों में, कुकीज़ का उपयोग करना याद रखने और वरीयताओं के अनुभव, या साइट के आँकड़ों के लिए आवश्यक वरीयताओं, खरीद, कमीशन और अन्य जानकारी को ट्रैक करने का सबसे प्रभावी तरीका है।

यह काम किस प्रकार करता है?

आपका सर्वर कुकी के रूप में विज़िटर के ब्राउज़र में कुछ डेटा भेजता है। ब्राउज़र कुकी को स्वीकार कर सकता है। यदि ऐसा होता है, तो इसे विज़िटर की हार्ड ड्राइव पर एक सादे टेक्स्ट रिकॉर्ड के रूप में संग्रहीत किया जाता है। अब, जब आगंतुक आपकी साइट पर किसी अन्य पेज पर आता है, तो कुकी पुनः प्राप्ति के लिए उपलब्ध होती है। एक बार पुनर्प्राप्त होने के बाद, आपका सर्वर जानता है / याद रखता है कि क्या संग्रहीत किया गया था।

कुकीज़ 5 चर-लंबाई वाले फ़ील्ड का एक सादा पाठ डेटा रिकॉर्ड हैं -

  • Expires- कुकी की तारीख समाप्त हो जाएगी। यदि यह रिक्त है, तो विज़िटर द्वारा ब्राउज़र को छोड़ने पर कुकी समाप्त हो जाएगी।

  • Domain - आपकी साइट का डोमेन नाम।

  • Path- निर्देशिका या वेब पेज के लिए पथ जो कुकी सेट करता है। यदि आप किसी भी निर्देशिका या पृष्ठ से कुकी को पुनः प्राप्त करना चाहते हैं तो यह रिक्त हो सकता है।

  • Secure- यदि इस फ़ील्ड में "सुरक्षित" शब्द है, तो कुकी को केवल एक सुरक्षित सर्वर के साथ पुनर्प्राप्त किया जा सकता है। यदि यह फ़ील्ड रिक्त है, तो ऐसा कोई प्रतिबंध मौजूद नहीं है।

  • Name = Value - कुंजी और मूल्य जोड़े के रूप में कुकीज़ सेट और पुनर्प्राप्त किए जाते हैं।

कुकीज़ की स्थापना

ब्राउजर में कुकीज भेजना बहुत आसान है। ये कुकीज़ सामग्री-प्रकार फ़ील्ड से पहले HTTP हैडर के साथ भेजी जाती हैं। मान लें कि आप कुकीज़ के रूप में यूजरआईडी और पासवर्ड सेट करना चाहते हैं। कुकीज़ को सेट करना इस प्रकार है -

#!/usr/bin/python
print "Set-Cookie:UserID = XYZ;\r\n"
print "Set-Cookie:Password = XYZ123;\r\n"
print "Set-Cookie:Expires = Tuesday, 31-Dec-2007 23:12:40 GMT;\r\n"
print "Set-Cookie:Domain = www.tutorialspoint.com;\r\n"
print "Set-Cookie:Path = /perl;\n"
print "Content-type:text/html\r\n\r\n"
...........Rest of the HTML Content....

इस उदाहरण से, आप समझ गए होंगे कि कुकीज़ कैसे सेट करें। हम प्रयोग करते हैंSet-Cookie कुकीज़ को सेट करने के लिए HTTP हेडर।

यह एक्सपायर, डोमेन और पाथ जैसी कुकीज़ विशेषताओं को सेट करने के लिए वैकल्पिक है। यह उल्लेखनीय है कि मैजिक लाइन भेजने से पहले कुकीज़ सेट की जाती हैं"Content-type:text/html\r\n\r\n

कुकीज़ वापस ले रहा है

सभी सेट कुकीज़ को पुनः प्राप्त करना बहुत आसान है। कुकीज़ CGI पर्यावरण चर HTTP_COOKIE में संगृहीत हैं और उनके निम्नलिखित रूप होंगे -

key1 = value1;key2 = value2;key3 = value3....

कुकीज़ कैसे प्राप्त करें, इसका एक उदाहरण यहां दिया गया है।

#!/usr/bin/python

# Import modules for CGI handling 
from os import environ
import cgi, cgitb

if environ.has_key('HTTP_COOKIE'):
   for cookie in map(strip, split(environ['HTTP_COOKIE'], ';')):
      (key, value ) = split(cookie, '=');
      if key == "UserID":
         user_id = value

      if key == "Password":
         password = value

print "User ID  = %s" % user_id
print "Password = %s" % password

यह उपरोक्त स्क्रिप्ट द्वारा निर्धारित कुकीज़ के लिए निम्न परिणाम उत्पन्न करता है -

User ID = XYZ
Password = XYZ123

फ़ाइल अपलोड उदाहरण

किसी फ़ाइल को अपलोड करने के लिए, HTML फॉर्म में enctype विशेषता सेट होनी चाहिए multipart/form-data। फ़ाइल प्रकार के साथ इनपुट टैग एक "ब्राउज़ करें" बटन बनाता है।

<html>
   <body>
      <form enctype = "multipart/form-data" action = "save_file.py" method = "post">
      <p>File: <input type = "file" name = "filename" /></p>
      <p><input type = "submit" value = "Upload" /></p>
      </form>
   </body>
</html>

इस कोड का परिणाम निम्न रूप है -

उपरोक्त उदाहरण को जानबूझकर हमारे सर्वर पर फ़ाइल अपलोड करने वाले लोगों को बचाने के लिए अक्षम किया गया है, लेकिन आप अपने सर्वर के साथ उपरोक्त कोड की कोशिश कर सकते हैं।

यहाँ स्क्रिप्ट है save_file.py फ़ाइल अपलोड को संभालने के लिए -

#!/usr/bin/python

import cgi, os
import cgitb; cgitb.enable()

form = cgi.FieldStorage()

# Get filename here.
fileitem = form['filename']

# Test if the file was uploaded
if fileitem.filename:
   # strip leading path from file name to avoid 
   # directory traversal attacks
   fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())

   message = 'The file "' + fn + '" was uploaded successfully'
   
else:
   message = 'No file was uploaded'
   
print """\
Content-Type: text/html\n
<html>
   <body>
      <p>%s</p>
   </body>
</html>
""" % (message,)

यदि आप उपर्युक्त स्क्रिप्ट को यूनिक्स / लिनक्स पर चलाते हैं, तो आपको निम्नानुसार फ़ाइल विभाजक को बदलने की देखभाल करने की आवश्यकता है, अन्यथा खुले () कथन के ऊपर आपके विंडोज़ मशीन पर ठीक काम करना चाहिए।

fn = os.path.basename(fileitem.filename.replace("\\", "/" ))

एक "फ़ाइल डाउनलोड" डायलॉग बॉक्स कैसे उठाएं?

कभी-कभी, यह वांछित होता है कि आप विकल्प देना चाहते हैं जहाँ कोई उपयोगकर्ता किसी लिंक पर क्लिक कर सकता है और यह वास्तविक सामग्री प्रदर्शित करने के बजाय उपयोगकर्ता को एक "फ़ाइल डाउनलोड" संवाद बॉक्स पॉप अप करेगा। यह बहुत आसान है और इसे HTTP हेडर के जरिए हासिल किया जा सकता है। यह HTTP हेडर पिछले अनुभाग में उल्लिखित हेडर से अलग है।

उदाहरण के लिए, यदि आप एक बनाना चाहते हैं FileName किसी दिए गए लिंक से डाउनलोड करने योग्य फ़ाइल, फिर उसका सिंटैक्स निम्नानुसार है -

#!/usr/bin/python

# HTTP Header
print "Content-Type:application/octet-stream; name = \"FileName\"\r\n";
print "Content-Disposition: attachment; filename = \"FileName\"\r\n\n";

# Actual File Content will go here.
fo = open("foo.txt", "rb")

str = fo.read();
print str

# Close opend file
fo.close()

आशा है कि आप इस ट्यूटोरियल का आनंद लेंगे। यदि हाँ, तो कृपया मुझे अपनी प्रतिक्रिया भेजें: हमसे संपर्क करें