使用 XMLHTTPRequest (TVMLJS) 发送 cookie
send a cookie with XMLHTTPRequest (TVMLJS)
我正在为我的 AppleTV 开发一个应用程序。该应用程序将从尚未开发任何此类内容的在线网站读取电影API。
我使用 XMLHTTPRequest 获取不同的 URLs 并让用户搜索他的电影等...一切正常,除了一个请求。要获取电影 URL,我必须使用常量 cookie(假设 mycookie=cookie)向特定地址(假设 http://example.com/getmovie.html)发送获取请求。
我试过使用 setRequestHeader:
var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.withCredentials = true;
xhr.setRequestHeader('Cookie', 'mycookie=cookie');
xhr.send();
但是好像没有发送cookie。
我还尝试使用 Document.cookie 设置 cookie,就像我可能在 "normal" js 脚本(在我的浏览器中是 运行)中所做的那样,但也没有运气。
这非常令人沮丧,尤其是因为我的应用程序快要结束了。
我想 cross-origin 可能是问题所在,但如果我不必设置 cookie,我可以毫无问题地获得 URLs,所以我有点迷路了。
请告诉我如何使用特定的 cookie header 获取 http://example.com/getmovie.html。
感谢您的帮助
很抱歉通知您,但出于安全原因,javascript 的 xmlHTTPRequest 函数不允许设置 cookie header,如下所示:Why cookies and set-cookie headers can't be set while making xmlhttprequest using setRequestHeader? 我能做的最好的方法看到你发出的 get 请求将发送到代理服务器,你将是 运行。我相信它是以这种方式构建的,以防止您在不属于您的域上设置 cookie,此外,我没有看到此问题的替代解决方案,因为在我查看的文档中没有提到 cookie 持久性或管理
如果有人遇到同样的问题:
我没有找到使用 javascript 发送 cookie 的解决方案。但是,在我的情况下,请求的来源并不重要,只有 cookie 才重要。然后我的解决方案是创建一个 PHP 文件接收目标 URL 和 cookie 内容作为参数,然后发送带有 cookie 的 get 请求作为请求 header。 (有关如何操作的更多信息,请点击此处:PHP GET Request, sending headers)。
然后,在我的 javascript 中,我使用 XMLHttpRequest 通过简单的获取参数连接到我的 PHP 文件(在线托管),然后我收到来自 PHP 的响应。如果请求的来源很重要,那么这个技巧当然不会奏效(除非你在家里托管你的文件,但就我而言,即使我的 WAMP 未打开,我也希望我的应用程序能够运行)。
Cordova 如何发送会话 cookie,允许使用 XMLhttprequest 的凭据:
// JS
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/ajax.php', true);
xhr.withCredentials = true;
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200) {
// alert(xhr.responseText);
// Get header from php server request if you want for something
var cookie = xhr.getResponseHeader("Cookie");
// alert("Cookie: " + cookie);
}
}
xhr.send();
// Php
// You can add cookie to header and get with (session works without it)
header('Cookie: PHPSESSID='.$_COOKIE['PHPSESSID']);
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With, Set-Cookie, Cookie, Bearer');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');
嗯...这里的问题是 xhr.setRequestHeader('Cookie', 'mycookie=cookie');
行只是因为 'Cookie' header 保留给客户端浏览器发送存储的 cookie。这意味着您正在尝试执行浏览器已经执行的操作。当您发送任何请求时,客户端浏览器会自动获取与您请求的站点相关的所有 cookie 并将它们放在 'Cookie' header 上,您无需执行任何其他操作,如果您的浏览器中存在您的 cookie,它将被发送。
我正在为我的 AppleTV 开发一个应用程序。该应用程序将从尚未开发任何此类内容的在线网站读取电影API。
我使用 XMLHTTPRequest 获取不同的 URLs 并让用户搜索他的电影等...一切正常,除了一个请求。要获取电影 URL,我必须使用常量 cookie(假设 mycookie=cookie)向特定地址(假设 http://example.com/getmovie.html)发送获取请求。
我试过使用 setRequestHeader:
var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.withCredentials = true;
xhr.setRequestHeader('Cookie', 'mycookie=cookie');
xhr.send();
但是好像没有发送cookie。 我还尝试使用 Document.cookie 设置 cookie,就像我可能在 "normal" js 脚本(在我的浏览器中是 运行)中所做的那样,但也没有运气。
这非常令人沮丧,尤其是因为我的应用程序快要结束了。
我想 cross-origin 可能是问题所在,但如果我不必设置 cookie,我可以毫无问题地获得 URLs,所以我有点迷路了。
请告诉我如何使用特定的 cookie header 获取 http://example.com/getmovie.html。
感谢您的帮助
很抱歉通知您,但出于安全原因,javascript 的 xmlHTTPRequest 函数不允许设置 cookie header,如下所示:Why cookies and set-cookie headers can't be set while making xmlhttprequest using setRequestHeader? 我能做的最好的方法看到你发出的 get 请求将发送到代理服务器,你将是 运行。我相信它是以这种方式构建的,以防止您在不属于您的域上设置 cookie,此外,我没有看到此问题的替代解决方案,因为在我查看的文档中没有提到 cookie 持久性或管理
如果有人遇到同样的问题:
我没有找到使用 javascript 发送 cookie 的解决方案。但是,在我的情况下,请求的来源并不重要,只有 cookie 才重要。然后我的解决方案是创建一个 PHP 文件接收目标 URL 和 cookie 内容作为参数,然后发送带有 cookie 的 get 请求作为请求 header。 (有关如何操作的更多信息,请点击此处:PHP GET Request, sending headers)。
然后,在我的 javascript 中,我使用 XMLHttpRequest 通过简单的获取参数连接到我的 PHP 文件(在线托管),然后我收到来自 PHP 的响应。如果请求的来源很重要,那么这个技巧当然不会奏效(除非你在家里托管你的文件,但就我而言,即使我的 WAMP 未打开,我也希望我的应用程序能够运行)。
Cordova 如何发送会话 cookie,允许使用 XMLhttprequest 的凭据:
// JS
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/ajax.php', true);
xhr.withCredentials = true;
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200) {
// alert(xhr.responseText);
// Get header from php server request if you want for something
var cookie = xhr.getResponseHeader("Cookie");
// alert("Cookie: " + cookie);
}
}
xhr.send();
// Php
// You can add cookie to header and get with (session works without it)
header('Cookie: PHPSESSID='.$_COOKIE['PHPSESSID']);
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With, Set-Cookie, Cookie, Bearer');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');
嗯...这里的问题是 xhr.setRequestHeader('Cookie', 'mycookie=cookie');
行只是因为 'Cookie' header 保留给客户端浏览器发送存储的 cookie。这意味着您正在尝试执行浏览器已经执行的操作。当您发送任何请求时,客户端浏览器会自动获取与您请求的站点相关的所有 cookie 并将它们放在 'Cookie' header 上,您无需执行任何其他操作,如果您的浏览器中存在您的 cookie,它将被发送。