title: Proof of concept RESTful Python server (using web.py) + testing with cURL
body: <p>I am in the process of writing a proof of concept RESTful server using web.py</p>
  
  <p>Here is the script:</p>
  
  <pre><code>#!/usr/bin/env python
  import web
  import json
  
  
  def notfound():
      #return web.notfound("Sorry, the page you were looking for was not found.")
      return json.dumps({'ok':0, 'errcode': 404})
  
  def internalerror():
      #return web.internalerror("Bad, bad server. No donut for you.")
      return json.dumps({'ok':0, 'errcode': 500})
  
  
  urls = (
      '/(.*)', 'handleRequest',
  )
  
  
  app = web.application(urls, globals())
  app.notfound = notfound
  app.internalerror = internalerror
  
  
  class handleRequest:
      def GET(self, method_id):
          if not method_id: 
              return web.notfound()
          else:
              return json.dumps({'ok': method_id})
  
      def POST(self):
          i = web.input()
          data = web.data() # you can get data use this method
          print data
          pass
  
  if __name__ == "__main__":
      app.run()
  </code></pre>
  
  <p>I can send GET requests ok, however when I try to send a POST request, I get an internal error. At the moment, I am not sure whether the error is due to cURL not sending the POST correctly (highly unlikely), or whether my server is not correctly implemented (more likely).</p>
  
  <p>This is the command I use to send the POST request:</p>
  
  <pre><code>curl -i -H "Accept: application/json" -X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","active":true http://localhost:8080/xx/xxx/xxxx
  </code></pre>
  
  <p>Here is the server response:</p>
  
  <pre><code>me@localhost:~curl -i -H "Accept: application/json" -X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","active":true http://localhost:8080/xx/xxx/xxxx
  HTTP/1.1 500 Internal Server Error
  Content-Length: 1382
  Content-Type: text/plain
  
  Traceback (most recent call last):
    File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/wsgiserver/__init__.py", line 1245, in communicate
      req.respond()
    File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/wsgiserver/__init__.py", line 775, in respond
      self.server.gateway(self).respond()
    File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/wsgiserver/__init__.py", line 2018, in respond
      response = self.req.server.wsgi_app(self.env, self.start_response)
    File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/httpserver.py", line 270, in __call__
      return self.app(environ, xstart_response)
    File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/httpserver.py", line 238, in __call__
      return self.app(environ, start_response)
    File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/application.py", line 277, in wsgi
      result = self.handle_with_processors()
    File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/application.py", line 247, in handle_with_processors
      return process(self.processors)
    File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/application.py", line 244, in process
      raise self.internalerror()
  TypeError: exceptions must be old-style classes or derived from BaseException, not str
  </code></pre>
  
  <p>What is the cause of the error - and how may I fix it?</p>