"hostname doesn't match" 在 PythonAnywhere 中使用请求时

"hostname doesn't match" when using requests in PythonAnywhere

编辑:我解决了问题,请参阅答案中的链接。

我在 PythonAnywhere 中使用 XMLHttpRequest AJAX API 从不同网站向我们的服务器发送数据。 发生了一些奇怪的事情:根据网站的不同,我们要么发送成功,要么收到此错误

POST https://canecto.pythonanywhere.com/api/ 500 (Internal Server Error)

即使加载了相同的代码。 我尝试在 Chrome 中通过 JavaScript 控制台手动打开请求并发送数据,但没有任何变化。

代码段如下所示:

var url = "https://canecto.pythonanywhere.com/api/";
var xmlHttpPost = new XMLHttpRequest();
xmlHttpPost.open("POST", url, true);
xmlHttpPost.setRequestHeader("Content-type", "application/json");

var postData = {
    page_url: window.location.href,
    time_on_page: activeTime,
    cookie: cookie,
    /* some variables */
};
xmlHttpPost.onreadystatechange = function() {
    if (xmlHttpPost.readyState == 4 && XMLHttpRequest.DONE) {
            console.log('');
    }
};

/* send data */
xmlHttpPost.send(JSON.stringify(postData));

我看了here,应该不是客户端的问题JavaScript。

如果我在服务器端检查,对于行 requests.get(page_url, headers=HEADER, timeout=10)(我尝试访问页面的地方),我得到这个日志:

我在 Python request library 上看到它可能与 SSL 验证有关,但我对此知之甚少。我尝试查看其他类似问题,但我没有找到答案。

有没有人有类似的经历并成功解决的?

仍然使用 Python < 2.7.9 的人:this answer worked for me. SNI is not supported in Python 2, that means you should follow such answer and these requirements 使请求与 SSL 证书验证一起工作。