目次
Hello Word! これは私の最初の CGI プログラムです
Hello %s %s
こんにちは %s %s
CheckBox Maths は : %s
チェックボックスの物理演算は : %s
選択された件名は %s
入力されたテキスト コンテンツは %s

Python CGIプログラミング

Nov 23, 2016 pm 02:05 PM

CGI とは

CGI は現在 NCSA によって管理されています。NCSA は CGI を次のように定義しています:

CGI (Common Gateway Interface)、共通ゲートウェイ インターフェイス。HTTP サーバーなどのサーバー上で実行されるプログラムであり、同じものを提供します。クライアントの HTML ページ インターフェイス。

Web ブラウズ

CGI の仕組みをよりよく理解するには、Web ページ上のリンクまたは URL をクリックするプロセスから始めます。

1. ブラウザを使用して URL にアクセスし、HTTP Web サーバーに接続します。

2. リクエスト情報を受信した後、Web サーバーは URL を解析し、アクセスされたファイルがサーバー上に存在するかどうかを確認し、ファイルが存在する場合はファイルの内容を返します。存在しない場合はエラー メッセージが返されます。

3. ブラウザはサーバーから情報を受信し、受信したファイルやエラーメッセージを表示します。

CGI プログラムには、Python スクリプト、PERL スクリプト、SHELL スクリプト、C または C++ プログラムなどがあります。

CGI アーキテクチャ図

Python CGIプログラミング

Web サーバーのサポートと構成

CGI プログラミングを実行する前に、Web サーバーが CGI をサポートし、CGI ハンドラーが構成されていることを確認してください。

すべての HTTP サーバー実行 CGI プログラムは、事前設定されたディレクトリに保存されます。このディレクトリは CGI ディレクトリと呼ばれ、慣例により /var/www/cgi-bin という名前が付けられます。

CGI ファイルの拡張子は .cgi ですが、Python では .py 拡張子も使用できます。

デフォルトでは、Linux サーバーが実行するように設定されている cgi-bin ディレクトリは /var/www です。

CGI スクリプトを実行するために他のディレクトリを指定したい場合は、httpd.conf 設定ファイルを次のように変更できます:

AllowOverrideなし

オプション ExecCGI

順序 許可、拒否

すべてから許可

ディレクトリ>

オプション すべて

最初の CGI プログラムを作成するには、Python を使用します。ファイル名は、/var/www/cgi-bin ディレクトリにあります。ファイルの内容は次のとおりです。権限は 755 です:

#!/usr/bin/python

print "Content-type: text/htmlrnrn"

print ''

print ''

print 'Hello Word - 初めてのCGIプログラム'

print ''

print ''

print '

Hello Word! これは私の最初の CGI プログラムです

'

print

Hello Word! これは私の最初の CGI プログラムです

この hello.py スクリプトは単純な Python スクリプトですスクリプトの最初の出力コンテンツ「Content-type: text/htmlrnrn」がブラウザに送信され、表示されるコンテンツ タイプが「text/html」であることがブラウザに伝えられます。

HTTP ヘッダー

hello.py ファイルのコンテンツ "Content-type: text/htmlrnrn" は HTTP ヘッダーの一部であり、ファイルのコンテンツ タイプをブラウザーに伝えるためにブラウザーに送信されます。

HTTPヘッダーの形式は次のとおりです:

HTTPフィールド名:フィールドコンテンツ

例:

Content-type:text/htmlrnrn

次の表はHTTPを紹介しています。 CGI プログラムの head 一般的に使用される情報:

Header

Description

Content-type: エンティティに対応する要求された MIME 情報。例: Content-type:text/html

Expires: Date 応答の有効期限が切れる日時

Location: URL 要求を完了するか、新しい URL を識別するために、受信者を要求されていない URL の場所にリダイレクトするために使用されます。 resource

Last-modified : Date 要求されたリソースの最終変更時刻

Content-length: N 要求されたコンテンツの長さ

Set-Cookie: String Set Http Cookie

CGI 環境変数

すべての CGI プログラムは次の環境変数を受け取ります、これらの変数は CGI プログラムで重要な役割を果たします:

変数名

説明

CONTENT_TYPE この環境変数の値は、渡される情報の MIME タイプを示します。現在、環境変数 CONTENT_TYPE は通常、application/x-www-form-urlencoded であり、データが HTML フォームから取得されることを示します。

CONTENT_LENGTH サーバーと CGI プログラム間の情報伝達方式が POST の場合、この環境変数は標準入力 STDIN から読み込める有効なデータのバイト数です。この環境変数は、入力されたデータを読み取るときに使用する必要があります。

HTTP_COOKIE クライアント内の COOKIE コンテンツ。

HTTP_USER_AGENT バージョン番号やその他の独自データを含むクライアント ブラウザ情報を提供します。

PATH_INFO この環境変数の値は、CGI プログラム名の直後の他のパス情報を表します。多くの場合、CGI プログラムのパラメータとして表示されます。

QUERY_STRING サーバーとCGIプログラム間の情報転送方式がGETの場合、この環境変数の値が転送される情報となります。この情報は、CGI プログラム名の後に疑問符「?」で区切って続きます。

REMOTE_ADDR この環境変数の値は、リクエストを送信するクライアントの IP アドレス (上記の 192.168.1.67 など) です。この値は常に存在します。これは、Web クライアントが Web サーバーに提供する必要がある一意の識別子であり、CGI プログラムでさまざまな Web クライアントを区別するために使用できます。

REMOTE_HOST この環境変数の値には、CGI リクエストを送信したクライアントのホスト名が含まれます。クエリしたいクエリがサポートされていない場合、この環境変数を定義する必要はありません。

REQUEST_METHOD スクリプトを呼び出すメソッドを提供します。 HTTP/1.0 プロトコルを使用するスクリプトの場合、GET と POST のみが意味を持ちます。

SCRIPT_FILENAME CGI スクリプトのフルパス

SCRIPT_NAME CGI スクリプトの名前

SERVER_NAME WEB サーバーのホスト名、エイリアス、または IP アドレスです。

SERVER_SOFTWARE この環境変数の値には、CGI プログラムを呼び出す HTTP サーバーの名前とバージョン番号が含まれます。たとえば、上記の値は Apache/2.2.14 (Unix) です。

以下は、CGI 環境変数を出力する簡単な CGI スクリプトです:

#!/usr/bin/python

import os

print "Content-type: text/htmlrnrn";

print "環境
";

for param in os.environ.keys() :

print "%20s: %s
" % (param, os.environ[param])

GET メソッドと POST メソッド

ブラウザ クライアントは 2 つのメソッドを渡しますサーバーに情報を送信するには、GET メソッドと POST メソッドの 2 つの方法があります。

データを送信するには GET メソッドを使用します

GET メソッドは、以下に示すように、エンコードされたユーザー情報をリクエスト ページの URL に「?」で区切って含めて送信します。

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2

GET リクエストに関するその他の注意事項:

GET リクエストはキャッシュ可能

GET リクエストはそのまま残りますブラウザで

GETリクエストは履歴にブックマークできます

GETリクエストは機密データを扱う場合には使用しないでください

GETリクエストには長さ制限があります

GETリクエストはデータを取得するためにのみ使用してください

簡単なURLの例: GET メソッド

以下は、GET メソッドを使用して hello_get.py プログラムに 2 つのパラメーターを送信する単純な URL です:

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

hello_get.py ファイルの次のコード:

#!/usr/bin/python

# CGI 処理モジュール

import cgi, cgitb

# FieldS のインスタンスを作成するとらじ

form = cgi.FieldStorage()

# データを取得

first_name = form.getvalue('first_name')

last_name = form.getvalue('last_name')

print "Content-type: text /htmlrnrn"

print ""

print "

"

print "

Hello - 2 番目の CGI プログラム"

print ""

print "

"

print "

Hello %s %s

" % (first_name, last_name)

print ""

print "> ;"

ブラウザリクエストの出力結果:

Hello ZARA ALI

簡単なフォーム例: GETメソッド

以下は、GET メソッドを使用して 2 つのデータをサーバーに送信する HTML フォームです。送信されたサーバー スクリプトも hello_get.py ファイルです。コードは次のとおりです。

名:

姓:

POST メソッドを使用して、データを渡す

POST メソッドを使用する サーバーへのデータの送信は、ユーザーのパスワードなどの一部の機密情報は POST を使用して送信する必要があります。

以下も hello_get.py で、ブラウザによって送信された POST フォーム データも処理できます:

#!/usr/bin/python

# CGI モジュールの紹介

import cgi、 cgitb

# FieldStorage インスタンスの作成

form = cgi.FieldStorage()

# フォームデータの取得

first_name = form.getvalue('first_name')

last_name = form.getvalue('last_name')

print "Content-type:text/htmlrnrn"

print ""

print "

"

print "

Hello - 2 番目の CGI プログラム"

print ""

print "

"

print "

こんにちは %s %s

" % (first_name, last_name)

print " body> "

print ""

次のフォームは、POST メソッドを通じてサーバー スクリプト hello_get.py にデータを送信します:

名:

姓:

CGI プログラムを介してチェックボックス データを転送

チェックボックスが使用されます 1 つ以上のオプション データを送信するには、HTML コードは次のとおりです:

数学

物理学

以下は、checkbox.cgi ファイルのコードです:

#!/usr/bin/python

# CGI処理モジュールの導入

import cgi, cgitb

# FieldStorageのインスタンスを作成

form = cgi.FieldStorage()

#受信フィールドデータ

if form.getvalue('maths' ):

math_flag = "ON"

else:

math_flag = "OFF"

if form.getvalue('physics'):

Physical_flag = " ON"

else:

physics_flag = " OFF"

print "Content-type:text/htmlrnrn"

print ""

print ""

print "< ;title>Checkbox - 3 番目の CGI プログラム> ;"

print ""

print ""

print "

CheckBox Maths は : %s

" % math_flag

print "

チェックボックスの物理演算は : %s

" %physics_flag

print ""

print ""

CGI プログラムを通じてラジオ データを転送します

ラジオのみにサーバーがデータを渡します。HTML コードは次のとおりです:

 数学

 Physics

&lt; input Type = "submit" value = "select subject"/&gt;

&lt;/form&gt;

radiobutton.py /bin/python

# CGI 処理用のインポートモジュール

import cgi, cgitb

# FieldStorage のインスタンスを作成する

form = cgi.FieldStorage()

# フィールドからデータを取得する

if form.getvalue('subject'):

subject = form.getvalue('subject')

else:

subject = "Not set"

print "Content-type:text/htmlrnrn"

print ""

print "

"

print "

ラジオ - 第 4 CGI プログラム"

print ""

print "

print "

選択された件名は %s

です" % subject

print ">"

print ""

通过CGI程序传递 Textareaデータ架

Textarea向服务器传递多行データベース,HTML代如下:

ここにテキストを入力してください...

textarea.cgi代筆如下:

#!/usr/bin/python

# CGI処理用のインポートモジュール

import cgi, cgitb

# Cre FieldStorage のインスタンスを食べました

フォーム = cgi.FieldStorage()

# フィールドからデータを取得する

if form.getvalue('textcontent'):

text_content = form.getvalue('textcontent')

else:

text_content = 「未入力」

print "Content-type:text/htmlrnrn"

print ""

print "

";

print "

テキストエリア - 5番目のCGIプログラム> ;"

print ""

print "

"

print "

入力されたテキスト コンテンツは %s

" % text_content

print ""

通过CGI程序传递下拉数据

HTML下拉框代码如下:

ドロップダウン.py脚本代码如下示:

#!/usr/bin/python

# CGI 処理用のインポートモジュール

import cgi, cgitb

# FieldStorage のインスタンスを作成します

フォーム= cgi.FieldStorage()

# フィールドからデータを取得する

if form.getvalue('dropdown'):

subject = form.getvalue('dropdown')

else:

subject = 「未入力」 "

print "Content-type:text/htmlrnrn"

print ""

print "

"

print "

ドロップダウン ボックス - 6 番目の CGI プログラム"

print ""

print " & lt; body & gt; "

" & lt; h2 & gt; select subject is%s & lt; ""

CGI の大きな欠点http プロトコルはユーザーの身元を判断しないという点で、プログラマにとっては非常に不便です

Cookie 機能の登場により、この欠点が補われます。

すべての Cookie は、顧客がスクリプトにアクセスしたときに、顧客のブラウザを通じて顧客のハードドライブに記録データを書き込み、そのデータ情報は次回顧客がスクリプトにアクセスしたときに取得され、それによって身元識別機能を実現します。パスワードの判定にはCookieがよく使われます。

Cookieの構文

http cookieは、ファイル転送よりも先にhttpヘッダーを介して送信されます。ヘッダー内のset-cookieの構文は次のとおりです:

Set-cookie:name=。 name;expires=date;path=path;domain=domain;secure

name=name: 複数の名前がある場合、Cookie の値を設定する必要があります (名前に「;」と「,」は使用できません)。値 「;」で区切ります。例: name1=name1;name2=name2;name3=name3。

expires=date: Cookie の有効期間、形式:expires="Wdy,DD-Mon-YYYY HH:MM:SS"

path=path: path がパスの場合、Cookie によってサポートされるパスを設定しますの場合、Cookie はこのディレクトリ内のすべてのファイルとサブディレクトリに対して有効になります (例: path="/cgi-bin/")。 path がファイルの場合、Cookie はこのファイルに対して有効になります (例: path="/cgi-)。 bin/cookie「.cgi」。

domain=domain: Cookie に有効なドメイン名 (例:domain="www.chinalb.com")

secure: このフラグが指定されている場合、Cookie は https 経由でのみ配信できることを意味しますSSLプロトコルのサーバー。

Cookie の受信は環境変数 HTTP_COOKIE を設定することで実現され、CGI プログラムはこの変数を取得することで Cookie 情報を取得できます。

Cookieの設定

Cookieの設定は非常に簡単で、Cookieはhttpヘッダーで個別に送信されます。次の例では、Cookie にユーザー ID とパスワードを設定します:

<p></p>#!/usr/bin/python<p></p> <p></p>print "Set-Cookie:UserID=XYZ;rn"<p></p>print " Set-Cookie:Password=XYZ123;rn"<p></p>print "Set-Cookie:Expires=火曜日、2007 年 12 月 31 日 23:12:40 GMT";rn"<p></p>print "Set-Cookie:Domain=www.ziqiangxuetang .com;rn"<p></p>print "Set-Cookie:Path=/perl;n"<p></p>print "Content-type:text/htmlrnrn"<p></p>....残りの HTML コンテンツ....<p></p> <p> </p><p></p>上記の例では、Set-Cookie ヘッダー情報を使用して Cookie 情報を設定します。有効期限 Expires、ドメイン名、パスなどの Cookie の他の属性は、「Content-type: text/」に設定されます。 htmlrnrn". <p></p>Cookie情報の取得<p></p>Cookie情報の取得ページは非常にシンプルです。Cookie情報はCGI環境変数HTTP_COOKIEに格納されており、格納形式は以下の通りです: <p></p><p></p><p></p>key1=value1; key2=value2 ;key3=value3....<p></p> <p></p><p></p> 以下は、Cookie 情報を取得する簡単な CGI プログラムです: <p></p><p></p><p></p>#!/usr/bin/python<p></p> <p></p>#CGI 処理用のモジュールのインポート<p></p>OSからenvironをインポート<p></p>import cgi、cgitb<p></p> <p></p>if environ.has_key('HTTP_COOKIE'):<p></p> for cookie in map(strip, Split(environ['HTTP_COOKIE'], ';' )): <p></p> (key, value) = split(cookie, '=');<p></p> if key == "UserID":<p></p> user_id = value<p></p><p></p> if key == "Password" :<p></p> パスワード = value<p> </p><p></p>print "User ID = %s" % user_id<p></p>print "Password = %s" %password<p></p> <p></p><p></p>上記のスクリプトの出力は次のとおりです: <p></p><p></p><p></p>U ser ID = XYZ<p> DPassword = xyz123</p><p> ファイルのアップロードの例: </p><p>Html アップロード ファイルの形式を設定して、enableype プロパティを Multipart/Form-Data として設定します。コードは次のとおりです。 </p><p></p><p></p><p> & lt; gt; </p><p> </p><p>&lt; form enctype = "multipart/form-data" </p><p> </p><p></p><p></p> <p></p><p></p>save_file.py スクリプト ファイルのコードは次のとおりです <p></p><p></p><p></p>#!/usr/bin / python<p></p> <p></p>import cgi, os<p></p>import cgit b; cgitb.enable ()<p></p><p></p>form = cgi.FieldStorage()<p></p>fileitem = form['filename'] <p></p><p></p># ファイルがアップロードされているかどうかを確認します<p></p>if fileitem.filename:<p> </p> # ファイルパスを設定します<p></p> fn = os.path.basename(fileitem.filename) <p></p> open('/tmp/' + fn, 'wb').write(fileitem.file.read())<p></p> <p></p> message = 'ファイル "' + fn + '" は正常にアップロードされました'<p></p> <p></p>else:<p></p> message = 'ファイルはアップロードされませんでした'<p></p>print """<p></p>Content-Type: text/htmln <p></p><p></p><p></p> <p>%s</p><p></p><p></p><p></p>""" % (message,)<p></p> <p> </p><p> </p>使用しているシステムが Unix/Linux の場合は、ファイル区切り文字を置き換える必要があります。ウィンドウの下では、open() を使用するだけで済みます。ステートメント: <p></p><p></p><p></p>fn = os.path.basename(fileitem.filename.replace ("\", "/" ))<p></p> <p></p><p></p>ファイルダウンロードダイアログボックス<p></p>ユーザーに提供する必要がある場合ファイルのダウンロード リンクと、ユーザーがリンクをクリックした後にファイルのダウンロード ダイアログ ボックスをポップアップ表示するため、HTTP ヘッダー情報を設定します。これらの関数を実装するための関数コードは次のとおりです: <p></p><p></p><p></p>#!/usr/bin/ python<p></p><p></p># HTTPヘッダー<p></p>print "Content-Type: application/octet-stream; name="FileName"rn ";<p></p>print "Content-Disposition:attachment; filename="FileName"rnn";<p></p> <p></p># 実際のファイルの内容を聞きます。<p></p>fo = open("foo.txt", "rb")<p></p> <p></p>str = fo.read();<p></p>print str<p></p><p></p>#開いているファイルを閉じる<p></p>fo.close()<p></p> <p></p><p></p><p></p>
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python vs. C:比較されたアプリケーションとユースケース Python vs. C:比較されたアプリケーションとユースケース Apr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ 2時間のPython計画:現実的なアプローチ Apr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:ゲーム、GUIなど Python:ゲーム、GUIなど Apr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

2時間でどのくらいのPythonを学ぶことができますか? 2時間でどのくらいのPythonを学ぶことができますか? Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

Python vs. C:曲線と使いやすさの学習 Python vs. C:曲線と使いやすさの学習 Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:主要なアプリケーションの調査 Python:主要なアプリケーションの調査 Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

Python:自動化、スクリプト、およびタスク管理 Python:自動化、スクリプト、およびタスク管理 Apr 16, 2025 am 12:14 AM

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

See all articles