javascript - 使用 URL 作为字符串的 POST 被 Flask 奇怪地解释

标签 javascript python flask

我有一个使用跨域资源共享 (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/

相关文章:

javascript - 从 redux reducer 获取结果

java - 如何从 JavaScript 中访问存储在 session 中的数组变量?

python - 可以在 matplotlib 的不同图中保持相同颜色的相同线条吗?

javascript - 动态创建输入,然后使用 Flask 从输入中获取数据

javascript - 隐藏最初隐藏的下拉列表重复项

Javascript:回调函数是唯一允许以前瞻性方式引用外部变量的函数吗?

python - 满足条件时如何更改数据框中的单个值?

python - Intellij 中未正确检测到 Python 文件并且缺少语法突出显示

python - Docker获取用户真实ip

python - 无法在 docker 化环境中从 Flask 连接到 Kafka