class Handler(BaseHTTPRequestHandler):
    def do_POST(self):
        body = json.loads(self.rfile.read(int(self.headers['Content-Length'])))
        valid = all(key in body for key in data['contract']['required'])
        result = output['success' if valid else 'missing_name']
        self.send_response(result['status'])
        self.send_header('Content-Type', 'application/json')
        self.end_headers()
        self.wfile.write(json.dumps(result['body'], ensure_ascii=False).encode())
    def log_message(self, *_):
        pass
server = ThreadingHTTPServer(('127.0.0.1', 0), Handler)
thread = threading.Thread(target=server.serve_forever, daemon=True)
thread.start()
statuses = []
try:
    for body in [data['valid'], data['invalid']]:
        request = urllib.request.Request(f'http://127.0.0.1:{server.server_port}/items', json.dumps(body).encode(), headers={'Content-Type': 'application/json'})
        try:
            with urllib.request.urlopen(request, timeout=5) as response:
                statuses.append(response.status)
        except urllib.error.HTTPError as error:
            statuses.append(error.code)
finally:
    server.shutdown()
    server.server_close()
    thread.join(timeout=5)
check('本机真实HTTP请求分别返回200和400', statuses == [200, 400])
result = {'local_http_statuses': statuses, 'contract': output}
