2016-03-08 47 views
0

我想在Python 3.4中使用asyncio模塊實現一個簡單的寧靜服務器,並且不能打我已定義的端點。當我在URL(http://127.0.0.1:8080/v1/queue)上執行一個CURL(GET請求)時,我得到了服務器的一個空的響應。我認爲我的基本類設置了asyncio存在一些問題。有人能指出嗎?CURL是否需要?在它使用aiohttp發送請求ASYNCIO方式AsyncIO python3.4 restserver

這裏實行的是我的代碼:

4 import asyncio 
    5 import aiorest 
    6 import json 
    8 
10 
11 class Sample(aiorest.RESTServer): 
12 
13  def _init__(self, *args, **kwargs): 
14   super().__init__(*args, **kwargs) 
15   self.add_url('GET', '/v1/queue', self.get_handler) 
16   self.add_url('POST', '/v1/stack', self.post_handler) 

19  def get_handler(self, request): 
20   return {'Welcome': 'user'} 
21 
22  def post_handler(self, request, payload): 
23   if not payload: 
24    return {'error': 'Payload not supplied'} 
25 
26   try: 
27    json_payload = json.loads(payload) 
28   except ValueError: 
29    return {'error': 'Invalid JSON supplied'} 
30   print('Payload received {0}'.format(json_payload)) 
32   return {'Payload Received Success'} 
33 
34 
35 def main(): 
36  loop = asyncio.get_event_loop() 
37  server = Sample(hostname='127.0.0.1', loop=loop) 
38  srv = loop.run_until_complete(loop.create_server(
39   server.make_handler, '127.0.0.1', 8080)) 
40  print('Server listening on port 8080') 

44  try: 
45   loop.run_forever() 
46  except KeyboardInterrupt: 
47   pass 
48  finally: 
49   srv.close() 
50   loop.run_until_complete(srv.wait_closed()) 
51   loop.close() 
52 
53 
54 if __name__ == '__main__': 
55  main() 

回答

1

爲什麼代碼不工作的原因是在樣品類的構造函數_init__代替__init__一個簡單的拼寫錯誤。解決此問題後,所有內容都應按預期工作。

編輯

的處理方法應該期望只有request說法,身體可以從傳遞request獲得。

def post_handler(self, request): 
    payload = request._request_body.decode('utf-8') 
    if not payload: 
     return {'error': 'Payload not supplied'} 

    try: 
     json_payload = json.loads(payload) 
    except ValueError: 
     return {'error': 'Invalid JSON supplied'} 
    print('Payload received {0}'.format(json_payload)) 
    return {'result': 'Payload Received Success'} 

提示

順便說一句,the development of aiorest has stopped

+0

我能夠發送GET請求,但我的POST始終發送一個空響應,當我捲曲它。 我初始化了payload到request.data。我認爲使用CURL傳遞的數據在我的post_handler中沒有被設置爲有效載荷。你能指出,如何從請求對象的post_handler中設置有效載荷嗎?謝謝 – psbits

+0

沒關係,我用aiohttp讓所有的東西都能正常工作。 – psbits

+0

我已編輯答案 – kwarunek