我有一个node.js API,如下所示,我从python发送了一个POST请求,如下所示,面临的问题是如果我删除了
headers={"Content-Type": "application/json"}
的POST很糟糕,如果我没有收到Read timed out. error
,谁能提供有关如何解决此超时错误的指南?
node.js端点
app.post("/api/bats_push",(req, res) => {
//console.log("Calling bats_push...")
const d = {
method: req.method,
headers: req.headers,
query: req.query,
body: ''
}
req.on('data', (c) => {
//console.log(c)
d.body = d.body + c
});
req.on('end', () => {
DATA.push(d);
res.end('Saved BATS job details');
//res.status(200).json({
//message: "Saved BATS job details",
//posts: req.body
//});
});
});
Python POST
try:
json"},timeout=10.0)
r = requests.post(webhook_url,data=json_data.encode("utf8"),verify=False,headers={"Content-Type": "application/json"})
print "posted"
print(r.status_code, r.reason)
print r.url
print r.text
except Exception as e:
print (e)
错误:-
InsecureRequestWarning)
HTTPSConnectionPool(host='company.com', port=443): Read timed out. (read timeout=10.0)
答案 0 :(得分:1)
我似乎您正在使用express.js。我相信您的问题是,该正文实际上已经被解析。您可以通过阅读req.body
进行检查。造成这种情况的原因是,express.js已经读取了整个主体(由于内容类型),而再次尝试读取主体将导致超时(未发出事件data
和事件end
)。
有几种解决方法。
禁用express.js主体解析器-或重新配置它以忽略json
删除阅读的正文代码并直接使用req.body
app.post("/api/bats_push",(req, res) => {
//console.log("Calling bats_push...")
const d = {
method: req.method,
headers: req.headers,
query: req.query,
body: req.body
}
DATA.push(d);
res.end('Saved BATS job details');
});
答案 1 :(得分:0)
根据请求为何不使用此功能:
class White (Pieces):
def __init__(self):
#stuff
def pawn(self, pieceposition):
empassant=#empassant from the pieces class
答案 2 :(得分:0)
看起来可能与您的SSL有关。 在服务器运行的情况下,检查是否将相同的错误发送给本地主机。
答案 3 :(得分:0)
根据您的问题,关键字是:
如果我删除headers = {“ Content-Type”:“ application / json”},那么POST就显得很简单。
原因可能很清楚:使用标题是错误的方式。
简单地说:node.js应用在检查逻辑代码之前先检查标头。
如果不自己发送标头,则请求部分使用以下默认标头:
{
'User-Agent': 'python-requests/2.22.0',
'Accept-Encoding': 'gzip, deflate',
'Accept': '*/*',
'Connection': 'keep-alive',
}
通过请求的代码可以在发布时打印默认标题。
您只需使用标题
{"Content-Type": "application/json"}
可能导致node.js应用认为要求不是合法的(我不知道该用英语来解释这个词)。
如果node.js应用程序是您自己开发的,则可以在创建tcp连接之后并在逻辑代码之前尝试查找框架的检查,方法是读取源代码。
如果不是您自己开发的node.js应用程序,请尝试更改标头并混合默认标头,以查找由node.js应用程序检查的标头密钥。
但是在我看来,这是关于node.js应用的界面描述的导入:
我们只是通过接口描述engouth使用,只需要从api标头的检查中知道错误,该描述应该向我们显示但不向我们显示?
希望能为您提供帮助。