Javascript 用URL作为字符串的POST会被flask奇怪地解释
我有一个使用跨源资源共享(CORS)AJAX请求的chrome扩展。它正在与烧瓶上的RESTAPI对话。它以字符串形式发布URL(如send()中所示)。然后我试图让flask将URL保存为字符串,但它对URL的解释非常奇怪。现在我正试图将一个名为“url”的局部变量保存为发布的url字符串 烧瓶代码:Javascript 用URL作为字符串的POST会被flask奇怪地解释,javascript,python,flask,Javascript,Python,Flask,我有一个使用跨源资源共享(CORS)AJAX请求的chrome扩展。它正在与烧瓶上的RESTAPI对话。它以字符串形式发布URL(如send()中所示)。然后我试图让flask将URL保存为字符串,但它对URL的解释非常奇怪。现在我正试图将一个名为“url”的局部变量保存为发布的url字符串 烧瓶代码: for items in request.form: url = items break print str(request.form) print str(url)
for items in request.form:
url = items
break
print str(request.form)
print str(url)
命令行输出:
ImmutableMultiDict([('redirect', u'true'), ('http://www.amazon.com/gp/product/B00KHWSB5M?gwSec', u'1'), ('ref_',
u's9_simh_gw_p74_d15_i2')])
redirect
Javascript/Ajax:
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
var text = xhr.responseText;
var title = text; //getTitle(text);
alert('Response from CORS request to ' + url + ': ' + title);
};
xhr.send("http://www.amazon.com/gp/product/B00KHWSB5M?gwSec=1&redirect=true&ref_=s9_simh_gw_p74_d15_i2");
堆栈溢出正在更改发送函数中的url。这里是:我看到两个问题,都在客户端 首先,您要提交一个表单,它应该是一组键/值对。如果您需要发送url,更合理的做法是使用以下语法:
url=http://www.amazon.com/...
然后在烧瓶端,您可以通过以下方式获得此URL:
url = request.form['url']
但是在你准备这样做之前,你必须考虑第二个问题:性格逃避。应用程序/x-www-form-urlencoded
内容类型要求对表单字段的值进行URL编码,以便服务器正确解释。以下是您在问题中指定的URL在编码时的外观:
http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2FB00KHWSB5M%3FgwSec%3D1%26redirect%3Dtrue%26ref_%3Ds9_simh_gw_p74_d15_i2
您可以使用该函数生成此编码
对于我提到的两个更改,您的send()
调用如下所示:
xhr.send("url=" + encodeURIComponent("http://www.amazon.com/..."));