1
對不起,要求一個可能愚蠢的問題,但在閱讀文檔,看例子等,我仍然沒有找到我想要做的解決方案。嘗試使用ZnServer的GET和POST請求
我使用Pythons web服務器作爲大型項目的一部分。它通過do_GET方法提供靜態文件,並可以通過do_POST方法處理POST請求(由客戶端使用XMLHTTPRequest發送)。一切都很好。
我想要做的是在Pharo中的Web服務器的實現。我認爲ZnServer(Pharo 2.0的一部分)是要走的路。它必須能夠提供靜態文件並處理POST請求。
一個非常簡單的HTTP服務器示例Python代碼
# httpd_test.py
# Imports
import os
import sys
import cgi
import json
from BaseHTTPServer import BaseHTTPRequestHandler
from BaseHTTPServer import HTTPServer
# HTTP Request Handler Class
class RequestHandler(BaseHTTPRequestHandler):
# Process GET requests
def do_GET(self):
print(self.path)
# Send response
tex = 'GET: ' + self.path
self.send_response(200)
self.send_header('Content-type','text/plain')
self.send_header('Content-length',str(len(tex)))
self.end_headers()
self.wfile.write(tex)
self.wfile.flush()
# Process POST requests
def do_POST(self):
# Read CGI data
CgiData = cgi.FieldStorage(fp = self.rfile,
headers = self.headers,
environ = {'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type']})
# Invoke action
if self.path == '/handler':
print(repr(CgiData))
else:
print('Unknown POST handler.')
print(repr(CgiData))
# Send response
self.send_response(200)
tex = repr(CgiData)
self.send_header('Content-type','text/plain')
self.send_header('Content-length',str(len(tex)))
self.end_headers()
self.wfile.write(tex)
self.wfile.flush()
# Start Server
if __name__ == '__main__':
server = HTTPServer(('127.0.0.1',8080),RequestHandler)
server.serve_forever()
我已經在菲羅(但沒有運氣)
start
"Start ZnServer default"
| staticFileServerDelegate |
ZnServer startDefaultOn: 8080.
(ZnServer default) logToTranscript.
(ZnServer default) authenticator: (ZnBasicAuthenticator username: 'foo' password: 'bar').
staticFileServerDelegate := ZnStaticFileServerDelegate new.
staticFileServerDelegate prefixFromString: 'zn';
directory: 'C:\Temp'.
" (ZnServer default) delegate prefixMap
at: 'zn'
put: [ :request | staticFileServerDelegate handleRequest: request ];
at: '/'
put: [ :request | ZnResponse redirect: 'C:\Temp' ]."
(ZnServer default) delegate prefixMap
at: '/'
put: [ :request | Transcript cr; show:'1 '; show: request; cr. ];
at: 'handler'
put: [ :request | Transcript cr; show:'3 '; show: request; cr. ].
「開始」 嘗試是一個類的方法一個沒有基類的自己的類。
我是法羅的新手,所以有可能我走錯了路。 我希望,描述足夠清楚,所以人們可以看到我想要做什麼。 任何幫助,將不勝感激。
在此先感謝。
非常感謝您的回答。 – Martin
對不起,忘了回答你關於海邊的問題。 Seaside是一個完整的Web應用程序框架。這對我在Pharo中嘗試做的事情來說太大了(已經在Python中完成了)。 – Martin