通过HTTP发送和接收简单的JSON消息

时间:2019-05-10 18:55:50

标签: python json http post server

我想通过HTTP发送和接收一些简单的数据。

这是服务器端:

import time
import BaseHTTPServer
import json

HOST_NAME = 'localhost' 
PORT_NUMBER = 9000 

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_POST(self):
        print "You've got mail!"
        content_len = int(self.headers.getheader('content-length', 0))
        body = self.rfile.read(content_len)
        data = json.loads(body)
        print data

if __name__ == '__main__':
    server_class = BaseHTTPServer.HTTPServer
    httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
    print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, 
PORT_NUMBER)
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()
    print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)

这是客户端:

import requests
import json

url = 'http://localhost:9000'
data = {
    'date': 'the best day',
    'time': 'the best time',
    'name': 'Janet Smith'
}

r = requests.post(url, json=data)
print r.status_code
print r.json() 

我收到此错误:

  

回溯(最近通话最近):   

中的文件“ testSend.py”,第17行      

r = requests.post(URL,json = data)

     

文件“ /Library/Python/2.7/site-packages/requests/api.py”,第116行,在文章中   返回请求('post',url,data = data,json = json,** kwargs)

     

请求中的文件“ /Library/Python/2.7/site-packages/requests/api.py”,第60行

     

返回会话。请求(方法=方法,URL = URL,**假)

     

请求中的文件“ /Library/Python/2.7/site-packages/requests/sessions.py”,第524行

     

resp = self.send(prep,** send_kwargs)

     

文件“ /Library/Python/2.7/site-packages/requests/sessions.py”,行637,在发送中

     

r = adapter.send(request,** kwargs)

     

文件send中的文件“ /Library/Python/2.7/site-packages/requests/adapters.py”,第498行

     

引发ConnectionError(err,request = request)

     

requests.exceptions.ConnectionError :(“连接已中止。”,

     

BadStatusLine(“''”,))

编辑: 我最初也曾遇到服务器端错误,但看起来问题可能出在一行粘贴的代码上。我重新缩进了所有内容,现在可以使用了。

1 个答案:

答案 0 :(得分:1)

原来有几个问题:

  1. 服务器端错误是由于复制粘贴代码引起的。我需要重新缩进。

  2. 通过将self.send_response(200)添加到服务器端的DO_POST函数中,修复了客户端错误

  3. #2引入了一个新的“无法解码json”错误。这是因为来自服务器的响应不包含json消息。因此,我只需要注释掉r.json()打印行或在服务器端发送json消息即可。