【问题标题】:Difference between Electron-based XMLHttpRequest and browser-based URL with query string?基于 Electron 的 XMLHttpRequest 和带有查询字符串的基于浏览器的 URL 之间的区别?
【发布时间】:2019-12-26 22:24:25
【问题描述】:

我正在开发一个Electron 应用程序并尝试集成Easy Digital Downloads Software Licensing WordPress 插件。我对 Electron/Javascript 中的 HTTP 通信做得不多,所以这可能是一个幼稚的问题。

问题:我能够从我的 EDD 服务器获得许可证激活响应,虽然没有特定错误,但由于某种原因未激活许可证。奇怪的是,如果我在具有相同数据的浏览器中使用 URL 和查询字符串,插件会按预期响应:我可以激活、停用和检查许可证的状态。

所以 EDD 似乎工作正常,Electron 没有错误。但是缺少一些东西。最初我使用net Electron 模块,但在出现此问题后,我改用example script from EDD(下图),它使用XMLHttpRequest。有了这个,我得到了以下回复:

{"成功":true,"license":"有效","item_id":539,"item_name":"我的 真棒应用","license_limit":1,"site_count":0,"expires":"2020-12-19 23:59:59","activations_left":1,"校验和":"f2d66c6844b37d1fa931b813c408", "payment_id":248,"customer_name":"马文 花园","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 - 刚刚尝试过,我“得到”了与以前相同的响应:没有错误但也没有激活。

是否有一些属性应该(或不应该)在 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);

【问题讨论】:

  • 您应该编辑掉您的个人信息吗?
  • 您正在发布 POST,而浏览器执行 GET。您可以尝试一下,然后构建查询字符串,看看会发生什么
  • @aw04 - 谢谢。刚刚尝试过(并用代码更新了问题)。我得到相同的结果:没有错误但也没有激活。很奇怪。
  • @kemicofasupportsMonica - 谢谢。我想我确实编辑了个人信息(“马文花园”是游戏大富翁的名字)

标签: javascript xmlhttprequest electron query-string easy-digital-downloads


【解决方案1】:

根据 Easy Digital Downloads 支持人员的一些帮助,此问题已得到解决。

问题与他们的 Software Licensing 插件设置中的属性有关:“不检查 URL”。我没有启用它,结果是我的来自Electron 的 API 调用失败,而使用浏览器的调用成功,因为浏览器添加了 Electron 没有的标题。

启用“不检查 URL”后,来自Electron 的调用工作。我想还有一个传递 URL 的选项,但由于我使用 EDD 来授权桌面软件,这似乎不是一个需要的选项。

无论如何,希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 2018-02-25
    • 2012-09-26
    • 2011-07-12
    • 1970-01-01
    • 2011-04-03
    • 2015-08-12
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多