我想通过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(“''”,))
编辑: 我最初也曾遇到服务器端错误,但看起来问题可能出在一行粘贴的代码上。我重新缩进了所有内容,现在可以使用了。
答案 0 :(得分:1)
原来有几个问题:
服务器端错误是由于复制粘贴代码引起的。我需要重新缩进。
通过将self.send_response(200)添加到服务器端的DO_POST函数中,修复了客户端错误
#2引入了一个新的“无法解码json”错误。这是因为来自服务器的响应不包含json消息。因此,我只需要注释掉r.json()打印行或在服务器端发送json消息即可。