Python - Pemrograman CGI: Panduan untuk Pemula

Halo semua, para penyihir Python masa depan! Saya sangat senang menjadi pemandu Anda dalam perjalanan yang menarik ini ke dunia pemrograman CGI dengan Python. Sebagai seseorang yang telah mengajar ilmu komputer selama tahun-tahun, saya bisa memberitahu Anda bahwa CGI adalah seperti saus rahasia yang membuat aplikasi web Anda menjadi hidup. Jadi, mari kita melepas lengan dan melompatlah!

Python - CGI Programming

Apa itu CGI?

CGI adalah singkatan dari Common Gateway Interface. Saya tahu itu terdengar seperti istilah yang panjang, tapi pikirkan tentang hal itu sebagai penerjemah antara server web Anda dan skrip Python Anda. Ini seperti memiliki penerjemah yang ramah yang membantu server Anda dan kode Anda berkomunikasi dengan lancar.

CGI memungkinkan kita untuk membuat halaman web dinamis yang dapat merespon input pengguna. Bayangkan sebuah situs web yang menyapa Anda dengan nama atau menampilkan konten yang dipersonalisasi - itu adalah keajaiban CGI yang bekerja!

Penjelajahan Web

Sebelum kita membahas detail tentang CGI, mari kita lihat secara cepat bagaimana cara kerja penjelajahan web. Ketika Anda mengetikkan URL di browser Anda, ini yang terjadi:

  1. Browser Anda mengirimkan permintaan ke server web.
  2. Server web memproses permintaan.
  3. Server mengirimkan tanggapan, biasanya dalam bentuk halaman HTML.
  4. Browser Anda menampilkan HTML ini, menampilkan halaman web yang Anda lihat.

CGI masuk ke permainan ketika kita ingin menghasilkan konten dinamis di langkah 3.

Diagram Arsitektur CGI

Berikut adalah diagram sederhana untuk memvisualisasikan cara CGI menyertai arsitektur web:

+-------------+    HTTP Request    +-------------+
|   Browser   | -----------------> |  Web Server |
|             | <----------------- |             |
+-------------+    HTTP Response   +-------------+
|
| CGI
v
+-------------+
| CGI Script  |
| (Python)    |
+-------------+

Dukungan dan Konfigurasi Server Web

Sebagian besar server web mendukung CGI, termasuk Apache dan Nginx. Untuk menggunakan CGI dengan Python, Anda perlu mengkonfigurasi server Anda untuk menjalankan skrip Python. Ini biasanya melibatkan pengaturan direktori khusus untuk skrip CGI dan memberitahu server untuk memperlakukan file di direktori ini sebagai dapat dieksekusi.

Contohnya, di Apache, Anda mungkin menambahkan sesuatu seperti ini ke konfigurasi Anda:

<Directory /var/www/cgi-bin>
Options ExecCGI
AddHandler cgi-script .py
</Directory>

Ini memberitahu Apache untuk menjalankan file .py di direktori /var/www/cgi-bin sebagai skrip CGI.

Program CGI Pertama

Mari kita tulis program CGI pertama kita! Kita akan memulai dengan contoh "Hello, World!" klasik. Buat file bernama hello.py di direktori CGI Anda:

#!/usr/bin/env python3
print("Content-Type: text/html")
print()
print("<html>")
print("<head>")
print("<title>Hello World - Program CGI Pertama</title>")
print("</head>")
print("<body>")
print("<h2>Hello World! Ini adalah program CGI pertama saya</h2>")
print("</body>")
print("</html>")

Mari kita pecahkan ini:

  1. Baris pertama memberitahu server untuk menggunakan Python untuk menjalankan skrip ini.
  2. Content-Type: text/html adalah header HTTP yang memberitahu browser kita mengirimkan HTML.
  3. print() kosong mengpisahkan header dari badan tanggapan.
  4. Yang tersisa adalah hanya HTML yang kita hasilkan secara dinamis.

Ketika Anda mengakses skrip ini melalui browser web Anda, Anda seharusnya melihat halaman yang mengatakan "Hello World! Ini adalah program CGI pertama saya".

Header HTTP

Dalam pemrograman CGI, sangat penting untuk mengirimkan header HTTP yang benar sebelum konten Anda. Header yang paling umum adalah Content-Type, yang memberitahu browser jenis data yang Anda kirimkan. Berikut adalah beberapa contoh:

Content Type Deskripsi
text/html Konten HTML
text/plain Teks biasa
image/jpeg Gambar JPEG
application/json Data JSON

Selalu ingat untuk mengirimkan header Content-Type yang sesuai sebelum konten Anda!

Variabel Lingkungan CGI

Skrip CGI memiliki akses ke berbagai variabel lingkungan yang menyediakan informasi tentang permintaan. Berikut adalah skrip yang menampilkan beberapa dari variabel ini:

#!/usr/bin/env python3
import os

print("Content-Type: text/html")
print()
print("<html><body>")
print("<h2>Variabel Lingkungan:</h2>")
for param in os.environ.keys():
print(f"<b>{param:20}</b>: {os.environ[param]}<br>")
print("</body></html>")

Skrip ini akan menampilkan semua variabel lingkungan yang tersedia untuk skrip CGI Anda, termasuk hal seperti jenis browser pengguna, nama server, dan lain-lain.

Metode GET dan POST

Ada dua metode utama untuk mengirimkan data ke skrip CGI: GET dan POST. Mari kita lihat keduanya:

Metode GET

Metode GET mengirimkan data sebagai bagian dari URL. Berikut adalah contoh sederhana:

#!/usr/bin/env python3
import cgi

print("Content-Type: text/html")
print()

form = cgi.FieldStorage()
name = form.getvalue('name', 'Dunia')

print("<html><body>")
print(f"<h2>Hello, {name}!</h2>")
print("</body></html>")

Anda dapat mengakses skrip ini dengan URL seperti http://serveranda.com/cgi-bin/hello.py?name=Alice, dan itu akan mengatakan "Hello, Alice!".

Metode POST

Metode POST mengirimkan data di badan permintaan HTTP. Ini biasanya digunakan untuk formulir. Berikut adalah contoh:

#!/usr/bin/env python3
import cgi

print("Content-Type: text/html")
print()

form = cgi.FieldStorage()
name = form.getvalue('name', 'Dunia')
email = form.getvalue('email', 'Tidak disediakan')

print("<html><body>")
print(f"<h2>Hello, {name}!</h2>")
print(f"<p>Email Anda adalah: {email}</p>")
print("</body></html>")

Skrip ini dapat digunakan dengan formulir HTML yang menggunakan metode POST.

Menangani Element Form Berbeda

CGI dapat menangani berbagai element form. Mari kita lihat beberapa contoh:

Checkbox

#!/usr/bin/env python3
import cgi

print("Content-Type: text/html")
print()

form = cgi.FieldStorage()
hobbies = form.getlist('hobby')

print("<html><body>")
print("<h2>Hobi Anda:</h2>")
for hobby in hobbies:
print(f"<p>{hobby}</p>")
print("</body></html>")

Tombol Radio

#!/usr/bin/env python3
import cgi

print("Content-Type: text/html")
print()

form = cgi.FieldStorage()
gender = form.getvalue('gender', 'Tidak ditentukan')

print("<html><body>")
print(f"<h2>Jenis kelamin Anda: {gender}</h2>")
print("</body></html>")

Area Teks

#!/usr/bin/env python3
import cgi

print("Content-Type: text/html")
print()

form = cgi.FieldStorage()
message = form.getvalue('message', 'Tidak ada pesan yang disediakan')

print("<html><body>")
print("<h2>Pesan Anda:</h2>")
print(f"<p>{message}</p>")
print("</body></html>")

Kotak Drop Down

#!/usr/bin/env python3
import cgi

print("Content-Type: text/html")
print()

form = cgi.FieldStorage()
country = form.getvalue('country', 'Tidak dipilih')

print("<html><body>")
print(f"<h2>Negara Anda: {country}</h2>")
print("</body></html>")

Menggunakan Cookie di CGI

Cookie adalah cara untuk menyimpan potongan data kecil di sisi klien. Ini berguna untuk mengingat preferensi pengguna atau menjaga informasi sesi. Berikut ini cara Anda bekerja dengan cookie di CGI:

Menyetel Cookie

#!/usr/bin/env python3
import cgi
from http import cookies
import datetime

# Buat cookie
c = cookies.SimpleCookie()
c['lastvisit'] = str(datetime.datetime.now())
c['lastvisit']['expires'] = 365 * 24 * 60 * 60  # kadaluarsa dalam setahun

print(c)  # Ini mencetak header Set-Cookie
print("Content-Type: text/html")
print()

print("<html><body>")
print("<h2>Cookie ditetapkan!</h2>")
print("</body></html>")

Mengambil Cookie

#!/usr/bin/env python3
import os
from http import cookies

print("Content-Type: text/html")
print()

if 'HTTP_COOKIE' in os.environ:
cookie_string = os.environ.get('HTTP_COOKIE')
c = cookies.SimpleCookie()
c.load(cookie_string)
lastvisit = c.get('lastvisit')
if lastvisit:
print(f"<h2>Kunjungan Anda terakhir adalah: {lastvisit.value}</h2>")
else:
print("<h2 Ini adalah kunjungan Anda pertama!</h2>")
else:
print("<h2 Ini adalah kunjungan Anda pertama!</h2>")

Contoh Unggah File

Menangani unggah file adalah agak lebih kompleks, tetapi berikut adalah contoh sederhana:

#!/usr/bin/env python3
import cgi, os
import cgitb; cgitb.enable()

print("Content-Type: text/html")
print()

form = cgi.FieldStorage()

# Dapatkan nama file di sini.
fileitem = form['filename']

# Test jika file diunggah
if fileitem.filename:
# hapus path awal dari nama file untuk
# menghindari serangan traversal direktori
fn = os.path.basename(fileitem.filename)
open('/tmp/' + fn, 'wb').write(fileitem.file.read())
message = f'File "{fn}" berhasil diunggah'
else:
message = 'Tidak ada file yang diunggah'

print(f"""\
<html>
<body>
<p>{message}</p>
</body>
</html>
""")

Cara Mengaktifkan Kotak "Unduh File"?

Untuk memicu unduhan file, Anda perlu mengatur header yang sesuai:

#!/usr/bin/env python3
import os

filename = "contoh.txt"  # Ini akan menjadi nama file Anda
filepath = "/path/to/your/file"  # Ini akan menjadi path ke file Anda

print("Content-Type: application/octet-stream")
print(f"Content-Disposition: attachment; filename={filename}")
print()  # Baris kosong, akhir dari header

# Sekarang kirimkan konten file
with open(os.path.join(filepath, filename), 'rb') as f:
print(f.read())

Skrip ini menyetel Content-Type ke application/octet-stream, yang memberitahu browser untuk mendownload file bukannya menampilkannya. Header Content-Disposition menyarankan nama file untuk unduhan.

Dan itu saja, folks! Kita telah membahas dasar-dasar pemrograman CGI dengan Python. Ingat, praktek membuat perfect, jadi jangan takut untuk bereksperimen dengan contoh ini dan membuat Anda sendiri. Selamat coding, dan semoga skrip CGI Anda selalu berjalan mulus!

Credits: Image by storyset