gpt4 book ai didi

python - Flask 没有从请求中获取任何 POST 数据

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:23 25 4
gpt4 key购买 nike

在我们的服务器中,我们有一段代码调用我的应用程序中的函数,如下所示:

data = urllib.urlencode( dict(api_key="a-key-goes-here") )
headers = {
"User-Agent" : "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36",
"Accept" : "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,text/png,*/*;q=0.5",
"Accept-Language" : "en-US,en;q=0.8",
"Accept-Charset" : "ISO-8859-1,utf-8",
"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
}
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
code = response.code
message = response.read()
response.close()

我知道这不是使用 url_for( 也不是通过您的应用程序调用 url 的其他方法,但这有一个原因。我们的服务器只是测试调用是否正确,但该 url 预计位于我们的应用程序之外,所以是 api key 。

因此,我们的服务器处理 url 如下所示:

@app.route('/loan_performer', methods=["GET", "POST"])
def loan_performer():
if 'api_key' in request.form and request.form['api_key'] == API_KEY:
ret = dict()

# rate1 return a random number between 3.000 and 4.000 and point1 will be 0
ret['rate_one'] = random.randint(3000, 4000)
ret['point_one'] = 0

# rate2 do it between 3.500 and 4.500, point2 being 0.5
ret['rate_two'] = random.randint(3500, 4500)
ret['point_two'] = 0.5

# rate3 between 4.000 and 5.000 with 1.0
ret['rate_three'] = random.randint(4000, 5000)
ret['point_three'] = 1.0

return json.dumps(ret), 200

else:
return u"Your API Key is invalid.", 403

我们的错误如标题所示:

我们不断收到错误“错误请求(GET 和 HEAD 请求可能不包含请求正文)”,这是由 Passenger WSGI for Apache 处理的 404 错误。但换句话来说,由于某种原因 request.form 是空的,而且它不应该是空的。

我做错了什么或者有其他方法将数据从 Flask 发布到外部吗?

如果我愿意更新需要更多信息,请调用。

编辑 1

我改用这样的请求:

dat = dict( api_key="a-key-goes-here" )
request = requests.post(url, data=dat)
message = request.text
code = request.status_code

而且它拒绝工作。这是我在处理 url 函数中制作的记录器:

(08/02/2014 07:07:20 AM) INFO This is message ImmutableMultiDict([]) ImmutableMultiDict([])  and this code 403

request.args - request.form - request.data ,全部为空,要么使用 urllib,要么使用 requests。

编辑 1 更新

从 Martin konecny 建议的方法中删除“GET”后,我得到了以下响应:

(08/02/2014 08:35:06 AM) INFO This is message <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>

代码 405

最佳答案

But in other words, for a reason request.form is empty and it shouldn't.

我认为你不能推断出这个结论。似乎发生的情况是您有一个带有 POST header 的 GET 请求。

来自Python docs :

data may be a string specifying additional data to send to the server, or None if no such data is needed. Currently HTTP requests are the only ones that use data; the HTTP request will be a POST instead of a GET when the data parameter is provided. data should be a buffer in the standard application/x-www-form-urlencoded format. The urllib.urlencode() function takes a mapping or sequence of 2-tuples and returns a string in this format.

您需要删除标题

"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"

当您发送带有空数据结构的请求时,或者只是将其全部删除(需要时urllib会自动添加)

关于python - Flask 没有从请求中获取任何 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25087339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com