对本地IP打印机的NetSuite HTTP POST请求

时间:2018-07-27 15:40:28

标签: netsuite suitescript suitescript2.0

我一直在尝试使用客户端脚本发送http发布请求,以将zpl字符串发送到我们的本地ip打印机。我不断收到“您请求的主机为null的主机未知或找不到。” 我究竟做错了什么?我需要使用RESTlet吗? 我也可以在netsuite之外使用此打印机进行POST打印,问题出在netsuite。

function print(tag) {
  var zpl = "^XA^CF0,30^FO20,20^FD" + tag.company + "^FS^FO20,50^FDPO # " + tag.poNum + "^FS^FO325,50^FDORD # " + tag.ordNum + "^FS^FO630,50^FDQTY^FS^CF0,50^FO700,40^FD" + tag.quantity + "^FS^BY2,10,100^FO" + calculateBarcodeDistance(tag.item.length) + ",175^BY3^BCN,50,Y,N,N,N^FD" + tag.item + "^FS^XZ";

  var printUrl = "http://192.168.0.0/pstprnt";

  var response = http.request({
    method: http.Method.POST,
    url: printUrl,
    body: zpl
  });
}

5 个答案:

答案 0 :(得分:2)

根据SuiteAnswers #44853N/http模块仅在服务器端脚本中受支持:

enter image description here

因此,您可能必须使用Suitelet并从客户端调用它。不幸的是,这意味着您必须公开公共IP地址上的端口,然后将端口从那里转发到打印机。

或者,您可以使用Jon在注释中建议的fetch API或XMLHttpRequest通过浏览器实现相同的目的。

答案 1 :(得分:1)

最简单的方法是在可以访问互联网的盒子上运行ngrok。您将发布到公共地址,然后转发给您的打印机。有一种方法可以设置证书,这样您就不会从端口扫描仪获得随机打印作业。

然后,您将使用当前样本发送到远程https地址,该地址将发送到服务器上的ngrok,并转发到打印机

答案 2 :(得分:0)

您将需要创建一个使用N / http模块的简单Suitelet。因此,您的客户脚本将发布到打印机套件中,这将进行实际的发布,然后将数据返回给您的客户脚本。

您可以在客户端脚本中使用jQuery.post(...)。

答案 3 :(得分:0)

另一种“简便”的方法是在生成标签的机器上安装apache / nginx /其他支持https的服务器。

您会map loop back addresses的某个有用名称

您将为上面的主机名generate自签名证书,并让您的服务器使用该主机并侦听回送地址。

您将服务器配置为reverse proxy,以将请求转发到打印机的IP地址

然后,您可以使用向本地服务器发送打印请求(使用iframe post hack),尽管它比ngrok解决方案要花更多的时间,但没有直接的成本。

答案 4 :(得分:0)

我想说的是,为了做到这一点,您需要使用静态IP地址发布到服务器,而示例中的IP地址看起来像是由家用路由器(又称为动态IP)生成的IP。

Netsuite帮助中http模块的第一行指出可以在客户端和服务器脚本中使用它。我已成功通过http模块将POST请求发送到http服务器,并获得了成功响应。我不必使用https。

您可以通过将网址更改为http://httpbin.org:80/post来进行测试,他们提供的服务只是将您发布的所有内容发回给您。