12

次の例を検討してください。

import string,cgi,time
from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class MyHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        try:
            if self.path.endswith(".html"):
                f = open(curdir + sep + self.path) #self.path has /test.html
#note that this potentially makes every file on your computer readable by the internet

                self.send_response(200)
                self.send_header('Content-type',    'text/html')
                self.end_headers()
                self.wfile.write(f.read())
                f.close()
                return

        except IOError:
            self.send_error(404,'File Not Found: %s' % self.path)


def main():
    try:
        server = HTTPServer(('', 80), MyHandler)
        print 'started httpserver...'
        server.serve_forever()
    except KeyboardInterrupt:
        print '^C received, shutting down server'
        server.socket.close()

if __name__ == '__main__':
    main()

ZIP ファイルもサーバーに送信したい場合はどうすればよいですか? この行は正しく機能しないと思いますか?

self.wfile.write(f.read())
4

3 に答える 3

10

open()へのパラメータとしてバイナリを渡します。これ:

f = open(curdir + sep + self.path, 'rb')

これの代わりに:

f = open(curdir + sep + self.path)

UNIXはバイナリとテキストを区別しませんが、Windowsは区別します。ただし、スクリプトがUNIXで実行される場合は、「b」は無視されるため、安全です。

于 2009-07-07T19:18:14.533 に答える
4

あなたの回線は問題なく機能します。問題は、Content-type適切に設定することです。application/zipの代わりに設定する必要がありtext/htmlます。

于 2009-07-07T19:12:48.040 に答える
3

任意の種類のフォルダ内のファイルを共有する場合は、コマンドを入力してみることもできます

python -m SimpleHTTPServer

これにより、ポート8000​​でサーバーが起動し、ファイルを参照できます(ディレクトリリストを介して)

于 2011-07-23T05:30:22.430 に答える