在我们的服务器中,我们已经在这篇文章中调用了一个代码来调用我的APP中的函数:
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(也没有其他方法通过你的APP调用网址,但这有一个原因。我们的服务器只是测试调用是否正确,但网址预计会在我们的APP之外,所以是api密钥。
因此,我们的服务器处理网址如下所示:
@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为Apache处理的404错误。但换句话说,出于某种原因,request.form是空的,它不应该。
我是否有任何错误或以其他方式将数据从Flask发布到外部?
如果需要更多信息,我愿意更新,只需打电话。
我切换到使用这样的请求:
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或者请求。
删除" GET"从Martin konecny建议的方法我得到了这个答复:
(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
答案 0 :(得分:1)
但换句话说,出于某种原因,request.form是空的,它不应该。
我认为你不能推断出这个结论。似乎正在发生的事情是你有一个带有POST标题的GET请求。
来自Python docs:
数据可以是指定要发送到服务器的其他数据的字符串,如果不需要这样的数据,则为None。目前,HTTP请求是唯一使用数据的请求;提供数据参数时,HTTP请求将是POST而不是GET。数据应该是标准application / x-www-form-urlencoded格式的缓冲区。 urllib.urlencode()函数采用2元组的映射或序列,并以此格式返回一个字符串。
您需要删除标题
&#34;内容类型&#34;:&#34; application / x-www-form-urlencoded;字符集= UTF-8&#34;
当您发送具有空数据结构的请求时,或者只是将其全部删除(在需要时将由urllib
自动添加)