我的解决办法
以防有的人懒得看过程,解决办法写前头~
do_xxx 设置响应头的时候多添加这一项:
self.send_header("Access-Control-Allow-Origin", "*")
- 1
如果有其他解决办法的,或者没有解决但找到其他解决办法的,恳请指教,共同进步,共创和谐社会,吼嘿~
错误出现场景
用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) # 此处出错
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
模拟Post请求,写了一个简单页面,点击按钮,发送post请求,并将结果展示在下面的文本框中。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
网页端模拟发送Post请求,后台报出
error: [Errno 32] Broken pipe
- 1
网上查资料
stackoverflow的一个提问 (第二个回答是我写的,如果我的办法对你有用,请帮我点个赞吧,谢谢O(∩_∩)O)
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
基本是说:客户端在服务器返回前,就已经断开连接,服务器端写response才报错。
艰辛旅途:
- 尝试了加close, flush,没有用。
- 然后考虑延长客户端的连接时间,不会 O__O “… (不太懂前端),以前写过类似的,好像也没有问题,应该不是前端请求的问题!
- 怀疑是程序处理时间太长导致,通过修改函数
my_program(input_text)
直接返回一个字符串,短时间返回不报错,但是页面未获得返回数据,post没有进入success函数! - 查找没有进入success回调函数原因,一番搜索(此处省略xxxxx)
- 看到浏览器调试窗口的角角上有一个红色的小点点!网页有错误!!ヾ(。`Д´。)
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is there
- 1
搜索解决上述错误的方法,No ‘Access-Control-Allow-Origin’ 说是“ajax跨域”什么的,选了最简单的解决办法,就是添加header
在请求的java方法中加入
ServletActionContext.getResponse().setHeader("Access-Control-Allow-Origin", "*");
即可然后网页能够正常显示短字符串了
- 尝试心理把处理程序改回原来的,然后也正常显示原本的处理结果了,没有报错,呵呵,就这样顺便解决了之前的问题。┑( ̄Д  ̄)┍
意见&建议
本文有什么写的不对的地方,欢迎各位指出,谢谢~
参考了:https://blog.csdn.net/zsdt345a780rfajwet/article/details/72828816