Pythonで簡易HTTPサーバー

Pythonで簡易HTTPサーバー

この方法はPython3でのやり方。
今更Python2は無いだろうけど。

HTTPサーバー起動

$ python -m http.server 8000

これでカレントディレクトリが公開されている。
ポート番号を8000にしているのは、80は管理者権限が必要なため。

CGIを動かしたいとき

オプションを指定する。

$ python -m http.server 8000 --cgi

CGIプログラムは./cgi-binに必ず置く。

このHTTPサーバは指定ファイルをそのまま素直に走らせているようなので、
Windowsの場合は.exeや.batなど、ダブルクリックで直接実行できるプログラムにする。
(標準出力を得て、標準出力するような)

WindowsのApacheは、shebangを読んでそのスクリプトエンジンで実行してくれるのに。

おまけ Windowsのexe作成

たとえばC#なら

Test1.cs

using System;
namespace Test1
{
        public class Test1
        {
                static void Main()
                {
                        Console.WriteLine("Context/type: text/html");
                        Console.WriteLine("");
                        Console.WriteLine("Hello, C#!");
                }
        }
}

コンパイルは下記の通り

D:\> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe Test1.cs

Test1.exeの出来上がり。

VB.netなら

Test2.vb

Module Test2
        Sub Main()
                Console.WriteLine("Context/type: text/html")
                Console.WriteLine("")
                Console.WriteLine("Hello, VB.net!")
        End Sub
End Module

コンパイルは下記の通り

D:\> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\vbc.exe Test2.vb

Test2.exeの出来上がり。

まとめ

ローカルのHTMLをhttpで表示したいだけで始めたのに、いろいろ試す事ができた。
たまにはC#やVB.netも楽しい。

同じタグの記事
同じカテゴリの記事

Vue Routerを使ったサイトで404が発生

Vue Routerを使ったサイトで404が発生してしまった

Vue Routerを使ったサイトで、いきなり途中のURLにジャンプしたり、$router.push(‘/xxx’)した後の表示でF5(リロード)したりしたら、404になってしまった。
vue-cliで開発中は問題なかったのに、buildしてapacheに配備したら404になった。

Not Found
The requested URL /xxx was not found on this server.

Apache Server at www.yamacoco.com Port 80

解決方法

ちゃんと公式ドキュメントに書かれていた。

https://router.vuejs.org/ja/guide/essentials/history-mode.html#%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E8%A8%AD%E5%AE%9A%E4%BE%8B

mod_rewriteで対応するなら

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

mod_dirが使えるのであれば

<IfModule mod_dir.c>
  FallbackResource /index.html
</IfModule>

まとめ

動かす前にドキュメントは読まなくてはいけない。

同じタグの記事
同じカテゴリの記事

PythonとBottomでWeb API作成

PythonとBottleでWeb API作成

ちょっとしたWeb APIを作る必要があった。
Web APIといえば、node.jsで簡単に作れそうだけど、
慣れ親しんだPythonならもっと簡単にできてしまう。
PythonとBottleを使って作ってみる。

Bottleのインストール

Bottleはpipでインストールしても良いし、単純にダウンロードしてAPIと同じディレクトリに置くだけでも動作する。

実装

from bottle import run, route, request, response
import json

@route('/echo/<msg1>/<msg2>')
def echo(msg1, msg2):
    # CORS
    if 'Origin' in request.headers:
        origin = request.headers['Origin']
        response.headers['Access-Control-Allow-Origin'] = origin
        response.headers['Access-Control-Allow-Methods'] = (
            'PUT, GET, POST, DELETE, OPTIONS')
        response.headers['Access-Control-Allow-Headers'] = (
            'Origin, Accept, Content-Type, X-Requested-With'
            ', X-CSRF-Token, Authorization')
    # ECHO
    return json.dumps({
        'msg1': msg1,
        'msg2': msg2,
    })

run(host='localhost', port=8080)

とりあえず、ブラウザからアセスしてみる

http://localhost:8080/echo/test11/test22

画面にJSONらしきテキストが表示された。

javascriptでfetchしてみる

fetch('http://localhost:8080/echo/js11/js22', {
    method: 'GET',
    mode: 'cors',
    cache: 'no-cache'
}).then(function(res) {
    res.json().then(function(data) {
        console.log(data);
    });
});

chromeで実行したところ、開発者コンソールにJSONが出力された。

まとめ

Pythonで簡単にWeb APIが作れた。
とりあえず、サーバに応答して欲しくて作ったが、クライアントがjavascriptなので、そのうちサーバー側もnode.jsで作って言語を統一しよう。

同じタグの記事
同じカテゴリの記事