質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

919閲覧

apacheを用いてformからGETで得られたデータをcgiを用いて表示させたい

Carlos_is_only

総合スコア42

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/12 06:28

windowsOSにて

apacheのルートディレクトリに以下のようなhtmlを作成いたしました。

input.html

ihtml

1<html> 2<body> 3<form method='GET' action="/cgi-bin/input.cgi"> 4<p>名前:<input type="text" name="name" size=20></p> 5<p>郵便番号:<input type="text" name="yubin" size=20></p> 6<p><input type="submit" value="送信" name="submit"></p> 7</form> 8</body> 9</html>

そしてルートディレクトリのcgi-binディレクトリに以下のような.cgiファイルを作成しました。

input.cgi

python

1 2#! C:\Users\user1\AppData\Local\Programs\Python\Python39\python.exe 3 4import cgi 5 6form = cgi.FieldStorage() 7 8name = form["name"].value 9yubin = form["yubin"].value 10 11print ('Content-type: text/html; charset=UTF-8') 12print(name) 13print(yubin)

ここでwww.IPアドレス/input.htmlにアクセスをして
入力した内容が表示されるか試してみたのですがいくらやっても

次のようなエラーが出てきます。
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at ruru@dekiru.jp to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

コードをネットで調べた感じとくに問題はないのと思うのですがいかがでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itagagaki

2021/06/12 07:36

Apacheのエラーログを見てください。 インストールフォルダ/logs/error.log です。
Carlos_is_only

2021/06/12 07:50

ありがとうございます。 ログには[Sat Jun 12 16:45:35.972173 2021] [cgi:error] [pid 8180:tid 1004] [client IPアドレス:49374] malformed header from script 'input.cgi': Bad header: aaa, referer: http://IPアドレス:8080/input.html と記載されておりました。 他の方のご指摘で 無事動きました。 HTTPの仕様としてヘッダーとボディの間に空の行を必要とするようで次のようにしなければなりませんでした。 print('Content-type: text/html; charset=UTF-8') print() # <- 空行の出力 print(name) print(yubin)
guest

回答1

0

ベストアンサー

コード上でおかしいと思われる箇所

CGIプログラムとしてレスポンスを返す場合、レスポンスヘッダーもボディも標準出力で行う必要がありますが、HTTPの仕様としてヘッダーとボディの間に空の行を必要とします

Python

python

1print('Content-type: text/html; charset=UTF-8') 2print() # <- 空行の出力 3print(name) 4print(yubin)

補足

CGIとしての使い方は普段しないため、ちょっとドキュメント眺めたりした範囲ですが、
以下のことを確認するとより精緻な判断などができると思います。

  • Apacheのエラーログ
  • CGIのスクリプトログ

参照

投稿2021/06/12 07:20

attakei

総合スコア2738

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Carlos_is_only

2021/06/12 07:47 編集

ありがとうございます。 無事動きました。 ログには[Sat Jun 12 16:45:35.972173 2021] [cgi:error] [pid 8180:tid 1004] [client IPアドレス:49374] malformed header from script 'input.cgi': Bad header: aaa, referer: http://IPアドレス:8080/input.html と記載されておりました。
attakei

2021/06/12 07:52

> Bad header: aaa まさに、回答の内容であっていそうですね。 元のコードでは空行がないままprint(name)を実行していたため、 nameの中身であろうaaaをヘッダーとみなされてしまい、 「変なヘッダーがある」と認識してサーバーエラーとなってたのでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問