基于电子的 XMLHttpRequest 和基于浏览器的 URL 与查询字符串的区别?
Difference between Electron-based XMLHttpRequest and browser-based URL with query string?
我正在开发 Electron
应用程序并尝试集成 Easy Digital Downloads
Software Licensing WordPress 插件。我在 Electron/Javascript 的 HTTP
交流方面做得不多,所以这可能是一个幼稚的问题。
问题:我能够从我的 EDD 服务器获得许可证激活响应,虽然没有特定错误,但由于某种原因许可证未激活。奇怪的是,如果我在具有相同数据的浏览器中使用 URL 和查询字符串,插件会按预期响应:我可以激活、停用和检查许可证的状态。
所以 EDD 似乎工作正常,Electron 没有错误。但有些东西不见了。最初我使用的是 net Electron module but after this issue came up, I switched to using the example script from EDD(下图),它使用 XMLHttpRequest
。这样我得到了以下回复:
{"success":true,"license":"valid","item_id":539,"item_name":"My
Awesome App","license_limit":1,"site_count":0,"expires":"2020-12-19
23:59:59","activations_left":1,"checksum":"f2d66c6844b37d1fa931b813c408",
"payment_id":248,"customer_name":"Marvin
Gardens","customer_email":"marvin@home.com","price_id":false}
这很好,除了 "activations_left":1 永远不会改变,它应该给出 "license_limit":1。所以有问题。
另一方面,如果我在浏览器中使用带有查询字符串的 URL,则 "activations_left" 会递减,并且许可证激活只能工作一次(应该如此)。例如,这有效:
http://YOURSITE.com/?edd_action=activate_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=http://licensedsite.com
我的问题:这两种方法有什么根本区别吗?有什么我需要添加到我的 XMLHttpRequest
中的吗?我有一张 EDD 打开的支持票,但我需要继续前进。很抱歉这么啰嗦!
更新:
@aw04 建议我尝试使用 GET
– 刚刚尝试过,我 "get" 得到了与以前相同的响应:没有错误,但也没有激活。
是否有一些 属性 应该(或不应该)在 Electron
请求中,默认情况下在浏览器请求中(或不在)?
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
console.log('xhttp.responseText', xhttp.responseText);
}
}
var url = "http://YOURSITE.com/?edd_action=activate_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff"
xhttp.open("GET", url);
xhttp.send();
var xhttp = new XMLHttpRequest();
var postUrl = 'http://<domain.com>/edd-sl/';
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
console.log(xhttp.responseText);
}
}
var data = {
edd_action: 'check_license',
license: '<license key>',
item_name: encodeURIComponent('<item name>'),
};
xhttp.open("POST", postUrl, true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.setRequestHeader("Access-Control-Allow-Origin", "http://local.dev");
var values = '';
for (var key in data){
values += key + '=' + data[ key ] + '&';
}
values = values.substring(0, values.length - 1);
xhttp.send(values);
根据 Easy Digital Downloads 支持人员的一些帮助,此问题已解决。
该问题与 Software Licensing
插件设置中的 属性 有关:"Do not check URL"。我没有启用它,结果是我从 Electron
调用的 API 失败了,而使用浏览器的调用成功了,因为浏览器添加了 headers 而 Electron 没有。
启用 "Do not check URL" 后,来自 Electron
的调用可以正常工作。我想还有一个选项可以传递 URL,但由于我使用 EDD 来许可桌面软件,所以这似乎不是一个必需的选项。
无论如何,希望这对某人有所帮助。
我正在开发 Electron
应用程序并尝试集成 Easy Digital Downloads
Software Licensing WordPress 插件。我在 Electron/Javascript 的 HTTP
交流方面做得不多,所以这可能是一个幼稚的问题。
问题:我能够从我的 EDD 服务器获得许可证激活响应,虽然没有特定错误,但由于某种原因许可证未激活。奇怪的是,如果我在具有相同数据的浏览器中使用 URL 和查询字符串,插件会按预期响应:我可以激活、停用和检查许可证的状态。
所以 EDD 似乎工作正常,Electron 没有错误。但有些东西不见了。最初我使用的是 net Electron module but after this issue came up, I switched to using the example script from EDD(下图),它使用 XMLHttpRequest
。这样我得到了以下回复:
{"success":true,"license":"valid","item_id":539,"item_name":"My Awesome App","license_limit":1,"site_count":0,"expires":"2020-12-19 23:59:59","activations_left":1,"checksum":"f2d66c6844b37d1fa931b813c408", "payment_id":248,"customer_name":"Marvin Gardens","customer_email":"marvin@home.com","price_id":false}
这很好,除了 "activations_left":1 永远不会改变,它应该给出 "license_limit":1。所以有问题。
另一方面,如果我在浏览器中使用带有查询字符串的 URL,则 "activations_left" 会递减,并且许可证激活只能工作一次(应该如此)。例如,这有效:
http://YOURSITE.com/?edd_action=activate_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=http://licensedsite.com
我的问题:这两种方法有什么根本区别吗?有什么我需要添加到我的 XMLHttpRequest
中的吗?我有一张 EDD 打开的支持票,但我需要继续前进。很抱歉这么啰嗦!
更新:
@aw04 建议我尝试使用 GET
– 刚刚尝试过,我 "get" 得到了与以前相同的响应:没有错误,但也没有激活。
是否有一些 属性 应该(或不应该)在 Electron
请求中,默认情况下在浏览器请求中(或不在)?
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
console.log('xhttp.responseText', xhttp.responseText);
}
}
var url = "http://YOURSITE.com/?edd_action=activate_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff"
xhttp.open("GET", url);
xhttp.send();
var xhttp = new XMLHttpRequest();
var postUrl = 'http://<domain.com>/edd-sl/';
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
console.log(xhttp.responseText);
}
}
var data = {
edd_action: 'check_license',
license: '<license key>',
item_name: encodeURIComponent('<item name>'),
};
xhttp.open("POST", postUrl, true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.setRequestHeader("Access-Control-Allow-Origin", "http://local.dev");
var values = '';
for (var key in data){
values += key + '=' + data[ key ] + '&';
}
values = values.substring(0, values.length - 1);
xhttp.send(values);
根据 Easy Digital Downloads 支持人员的一些帮助,此问题已解决。
该问题与 Software Licensing
插件设置中的 属性 有关:"Do not check URL"。我没有启用它,结果是我从 Electron
调用的 API 失败了,而使用浏览器的调用成功了,因为浏览器添加了 headers 而 Electron 没有。
启用 "Do not check URL" 后,来自 Electron
的调用可以正常工作。我想还有一个选项可以传递 URL,但由于我使用 EDD 来许可桌面软件,所以这似乎不是一个必需的选项。
无论如何,希望这对某人有所帮助。