我有一个使用跨域资源共享 (CORS) AJAX 请求的 Chrome 扩展。它正在与 Flask 上的 REST api 进行通信。它将 URL 作为字符串 POST(如 send() 中所示)。然后我试图让 Flask 将 URL 保存为字符串,但它对 URL 的解释非常奇怪。现在我只是想将一个名为“url”的本地变量保存为发布的 URL 字符串。
flask 代码:
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。这是:http://www.amazon.com/gp/product/B00KHWSB5M?gwSec=1&redirect=true&ref_=s9_simh_gw_p74_d15_i2
最佳答案
我发现两个问题,都在客户端。
首先,您要提交一个表单,该表单应该是一组键/值对。如果您需要发送 url,更有意义的是使用以下语法:
url=http://www.amazon.com/...
然后在 Flask 端,您可以通过以下方式获取此 URL:
url = request.form['url']
但在你准备好之前,你必须考虑字符转义的第二个问题。 application/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
您可以使用函数encodeURIComponent生成此编码。
经过我提到的两项更改,您的 send()
调用将如下所示:
xhr.send("url=" + encodeURIComponent("http://www.amazon.com/..."));
关于javascript - 使用 URL 作为字符串的 POST 被 Flask 奇怪地解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898500/