चलिए कुछ सरल से शुरू करते हैं: एक फ़ील्ड वाला एक फॉर्म जो प्रतिबिंबित हो जाता है।रीबोल 3 के साथ "हैलो, वर्ल्ड" सीजीआई कैसे लिखें?
उत्तर
इस लेखन (2013-01) के समय, रेबोल 3 में अभी भी कुछ सीजीआई-सहायक कार्यों की कमी है जो कि रीबोल 2 के साथ बंडल किए गए थे। हालांकि, अगर आप लापता सीजीआई का समर्थन करते हुए हैकिंग के साथ ठीक हैं, तो आप कर सकते हैं अभी भी तुरंत जा रहे हैं।
इससे पहले कि हम शुरू करते हैं, आप मशीन आप अपने सीजीआई चलाना चाहते हैं पर R3 द्विआधारी स्टोर करने के लिए की जरूरत है, और आप जहां आप इसे (सादगी की खातिर) संग्रहीत करने के लिए पूरा पथ पता करने की जरूरत। निम्नलिखित उदाहरण यूनिक्स-शैली मशीन को /usr/local/bin/rebol3
में R3 बाइनरी के साथ मानते हैं।
आइए आपके अनुरोध के मुकाबले कुछ और आसान से शुरू करें: एक CGI बस "हैलो, वर्ल्ड!" भेज रहा है पृष्ठ:
#!/usr/local/bin/rebol3 -cs
REBOL []
prin [
"Content-type: text/html" crlf
crlf
<!doctype html>
<title> "Rebol 3 CGI Sample: Hello" </title>
"Hello, World!"
]
यह आर 2 में आप जो लिखना चाहते हैं उसके समान है।
कुछ और दिलचस्प दिलचस्प: जैसा कि आपने अनुरोध किया है, एक HTML फॉर्म सबमिशन को पढ़ना और पार्स करना।
इसके लिए हमें सीजीआई के बारे में दो चीजें जाननी चाहिए: सबमिट किया गया डेटा सीजीआई को मानक इनपुट के रूप में पास किया गया है; अन्य CGI- विशिष्ट जानकारी वेबसर्वर से पर्यावरण चर के माध्यम से पारित की जाती है। हम system/ports/input
पोर्ट के माध्यम से R3 में इनपुट डेटा तक पहुंच सकते हैं, और get-env
मूल का उपयोग करके पर्यावरण चर पढ़ सकते हैं।
आइए HTML फॉर्म को स्वयं CGI में एम्बेड करें, और CGI के भीतर एक मोड स्विच करें: यदि कोई डेटा सबमिट नहीं किया गया है, तो HTML फॉर्म दिखाएं; यदि डेटा जमा किया गया था, तो इसे संसाधित करें और उचित प्रतिक्रिया दिखाएं। हम इसे एक फॉर्म लिखकर कर सकते हैं जो HTTP विधि POST के माध्यम से डेटा सबमिट करता है, और उसके बाद सीजीआई के भीतर जांच कर रहा है अगर इसे HTTP विधि GET (कोई डेटा) या POST (फॉर्म डेटा) के माध्यम से लागू किया गया था। जिस विधि के साथ सीजीआई स्क्रिप्ट का आह्वान किया गया था, वह REQUEST_METHOD
पर्यावरण चर के माध्यम से उपलब्ध है।
#!/usr/local/bin/rebol3 -cs
REBOL []
handle-get: function [] [
prin [
"Content-type: text/html" crlf
crlf
<!doctype html>
<title> "Rebol 3 CGI Sample: Form" </title>
<form method="POST">
"Your name:"
<input type="text" name="field">
<input type="submit">
</form>
]
]
handle-post: function [] [
data: to string! read system/ports/input
fields: parse data "&="
value: dehex select fields "field"
prin [
"Content-type: text/html" crlf
crlf
<!doctype html>
<title> "Rebol 3 CGI Sample: Response" </title>
"Hello," (join value "!")
]
]
main: does [
switch get-env "REQUEST_METHOD" [
"GET" [handle-get]
"POST" [handle-post]
]
]
main
इस स्क्रिप्ट को समझने के लिए अंतिम टुकड़ा वास्तव में सीजीआई के लिए भेजा HTML प्रपत्र डेटा पार्स करने के लिए कैसे:
कि सभी ने कहा कि के साथ, यहां आगे की हलचल के बिना पूर्ण स्क्रिप्ट है। Rebol 2 के लिए decode-cgi
सहायक कार्य था, जिसमें वर्तमान में Rebol 3 की कमी है।
हालांकि, बुनियादी रूपों के लिए, यह पता चला है कि सीजीआई डेटा एन्कोडिंग कि =
साथ &
साथ खेतों और क्षेत्र का नाम और मूल्य अलग से भेजी गई है पर्याप्त होता; हमेशा यूआरएल-एन्कोडेड है। इसलिए यदि हम "चार्ली" के मूल्य के साथ ऊपर एम्बेड किए गए फॉर्म को सबमिट करते हैं, तो CGI को इनपुट के रूप में field=Charlie
प्राप्त होगा। सबमिट करना "फू बार" भेजता है "फ़ील्ड = फू% 20 बार"। तो, फिर से: मूल रूपों के लिए, ऊपर दिखाए गए अनुसार parse ... "&="
(फ़ील्ड और फ़ील्ड नामों और मानों को विभाजित करने के लिए) और dehex
(URL-एन्कोडिंग को डीकोड करने के लिए) का संयोजन पर्याप्त होगा।
ग्रेट, धन्यवाद। मैं जो कुछ जानना चाहता था उसे कवर करता है :) – dt2
मैंने अपने वेबफॉर्म डिकोडर को R3 पर पोर्ट किया: http://reb4.me/r/r3webform - ('load-webform' और 'to-webform')। 'डीकोड-सीजीआई 'से थोड़ा आगे जाता है और गहरी डेटा संरचनाएं बनाएगा, उदाहरण:' लोड-वेबफॉर्म" a.a = ए और ए.बी = बी "'। – rgchris
आर 3 वेब फॉर्म एन/डीकोडर अब http://reb4.me/r3/altwebform – rgchris
- 1. "हैलो वर्ल्ड"?
- 2. प्रोलॉग में हैलो वर्ल्ड
- 3. "हैलो वर्ल्ड" - टीडीडी रास्ता?
- 4. डीडीके "हैलो वर्ल्ड"
- 5. ए 'हैलो वर्ल्ड' उदाहरण?
- 6. ग्रीसमोन्की हैलो वर्ल्ड
- 7. हैकेल लेक्सह हैलो-वर्ल्ड
- 8. एंड्रॉइड-हैलो वर्ल्ड
- 9. mod_wsgi में हैलो वर्ल्ड
- 10. बूस्ट-पायथन हैलो वर्ल्ड
- 11. ओपन एमपीआई "हैलो, वर्ल्ड!"
- 12. मेरा एंड्रॉइड "हैलो वर्ल्ड" ऐप "हैलो"
- 13. जावा में जावापॉस हैलो वर्ल्ड
- 14. संकलन jruby "हैलो वर्ल्ड" समस्या
- 15. हास्केल हैलो वर्ल्ड, ग्रहण आईडीई
- 16. रेल पर रूबी: हैलो वर्ल्ड
- 17. रेल के साथ हैलो वर्ल्ड रैक मिडलवेयर 3: सभी अनुरोधों के शरीर को कैसे संसाधित करें
- 18. जावा में ओजीएनएल हैलो वर्ल्ड
- 19. सर्कोस के लिए हैलो वर्ल्ड उदाहरण?
- 20. ehcache के लिए हैलो वर्ल्ड उदाहरण?
- 21. आर के लिए फ़ाइल में एक हैलो वर्ल्ड प्रोग्राम कैसे लिखें और निष्पादित करें?
- 22. हैलो वर्ल्ड! रिमोट स्टेटलेस सत्र बीन
- 23. निंटेंडो 64 के लिए हैलो वर्ल्ड कैसे बनाएं?
- 24. समवर्ती कार्यक्रमों की "हैलो वर्ल्ड" क्या है?
- 25. एमएसबिल्ड कस्टम कार्य "हैलो वर्ल्ड" वॉकथ्रू
- 26. हैडोप हैलो वर्ल्ड उदाहरण और परिचय
- 27. ऑटोोटूल का उपयोग कर हैलो वर्ल्ड लाइब्रेरी
- 28. ACTIVEMQ- प्रकाशक ग्राहक हैलो वर्ल्ड उदाहरण
- 29. "हैलो वर्ल्ड" + जेएस वी 8 + वीएस -2010
- 30. एसपीडीवाई "हैलो वर्ल्ड" कैसा दिखता है?
क्या आपने विधि [रीबोल 2 के लिए वर्णित] की कोशिश की है (http://www.rebol.com/docs/apache-cgi.html)? यदि हां, तो आपने प्रक्रिया में कहां दीवार मारा? – HostileFork