以防有的人懒得看过程,解决办法写前头~
do_xxx 设置响应头的时候多添加这一项:
self.send_header("Access-Control-Allow-Origin", "*")
用python写一个服务,继承 BaseHTTPRequestHandler
,Get请求处理正确(代码未贴出),Post请求出现错误。
def do_POST(self):
# 配置响应头
self.send_response(200)
self.send_header('Content-Type', 'text/html; charset=utf-8')
self.end_headers()
ctype, pdict = parse_header(self.headers['content-type'])
# print 'content-type',self.headers['content-type']
if ctype == 'multipart/form-data':
postvars = parse_multipart(self.rfile, pdict)
elif ctype == 'application/x-www-form-urlencoded':
length = int(self.headers['content-length'])
postvars = parse_qs(
self.rfile.read(length),
keep_blank_values=1)
elif ctype == 'text/plain':
length = int(self.headers['content-length'])
data = self.rfile.read(length)
postvars = json.loads(data)
else:
postvars = {}
self.core_process(postvars)
def core_process(self, query_dict):
query_text = query_dict["query_text"][0] if "query_text" in query_dict else None
out_data = my_program(query_text) # 主要处理程序,正确处理
print 'has get rst' # 能够打印该句
self.wfile.write(out_data) # 此处出错
模拟Post请求,写了一个简单页面,点击按钮,发送post请求,并将结果展示在下面的文本框中。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>测试Post请求title>
<script src="http://code.jquery.com/jquery.js">script>
<script>
$(document).ready(function(){
$('#inputForm').submit(function(e){
e.preventDefault();
var $form1 = $(this);
data = {query_text:$('#query_text').val()};
url = "http://172.16.3.241:8088";
$.post(url, data, function (data) {
$('#output_result').val(data);
});
});
});
script>
head>
<body>
<form id="inputForm" name="inputForm" method="post" action="172.16.3.241:8088">
<div>
<label>query_text:label>
<textarea name="query_text" id="query_text" rows="8" cols="40">textarea>
div>
<div>
<button type="submit">Post请求button>
div>
form>
<div>
<label>output_result:label>
<textarea name="output_result" id="output_result" rows="8" cols="40">textarea>
div>
body>
html>
网页端模拟发送Post请求,后台报出
error: [Errno 32] Broken pipe
网上查资料
stackoverflow的一个提问 (第二个回答是我写的,如果我的办法对你有用,请帮我点个赞吧,谢谢O(∩_∩)O)
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
基本是说:客户端在服务器返回前,就已经断开连接,服务器端写response才报错。
艰辛旅途:
my_program(input_text)
直接返回一个字符串,短时间返回不报错,但是页面未获得返回数据,post没有进入success函数!No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is there
搜索解决上述错误的方法,No ‘Access-Control-Allow-Origin’ 说是“ajax跨域”什么的,选了最简单的解决办法,就是添加header
在请求的java方法中加入
ServletActionContext.getResponse().setHeader("Access-Control-Allow-Origin", "*");
即可
然后网页能够正常显示短字符串了
本文有什么写的不对的地方,欢迎各位指出,谢谢~