我使用跨源资源共享(CORS)AJAX请求进行了chrome扩展。它正在与烧瓶上的REST api交谈。它将URL作为字符串POST(如send()中所示)。然后我试图让烧瓶将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");
堆栈溢出正在改变send函数中的url。这是:http://www.amazon.com/gp/product/B00KHWSB5M?gwSec=1&redirect=true&ref_=s9_simh_gw_p74_d15_i2
答案 0 :(得分:2)
我在客户端看到了两个问题。
首先,您要提交一个表单,该表单应该是一组键/值对。如果你需要发送一个网址,那么更有意义的是使用这种语法:
url=http://www.amazon.com/...
然后在Flask一侧,您可以使用以下网址获取此网址:
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/..."));