Andrew1979 发表于 2022-7-5 19:52:36

通过LISP连接到Web服务器

我在想,我想用LISP做什么可能是不可能的,但也许有一个比我聪明得多的人可以为我指明正确的方向。
 
基本上,我在想,如果客户不再愿意付费使用,如何让一个基于订阅的软件停止工作。
 
我认为,当程序在AutoCAD中运行时,它需要检查web服务器是否仍然订阅,然后执行其例程,否则无法工作。
 
你知道怎么做这样的事情吗?我想不出用lisp怎么能做到这一点,但也许是另一种编程语言?可能网络?
 
此外,我不认为每次调用例程时都检查服务器是非常有效的,也许有人知道更好的方法?
 
希望大家都能想到这一点。我以前曾设法将许可部分写入lisp,但不是通过连接到每天检查的web服务器。
 
谢谢

BIGAL 发表于 2022-7-5 20:04:07

lee mac有一个check web server示例,每个autocad会话只运行一次。
 

;;---------------------=={ Internet Time }==------------------;;
;;                                                            ;;
;;Returns the date and/or UTC time as a string in the       ;;
;;format specified. Data is sourced from a NIST server.   ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;format - string specifying format of returned information ;;
;;         using the following identifiers to represent   ;;
;;         date & time quantities:                        ;;
;;         YYYY = 4-digit year                              ;;
;;         YY   = Year, MO = Month,   DD = Day            ;;
;;         HH   = Hour, MM = Minutes, SS = Seconds          ;;
;;------------------------------------------------------------;;
;;Returns:String containing formatted date/time data      ;;
;;------------------------------------------------------------;;
(defun LM:InternetTime ( format / result rgx server xml )
   (setq server "http://time.nist.gov:13")
   (setq result
       (vl-catch-all-apply
         (function
               (lambda ( / str )
                   (setq xml (vlax-create-object "MSXML2.XMLHTTP.3.0"))
                   (setq rgx (vlax-create-object "vbscript.regexp"))
                   (vlax-invoke-method xml 'open "POST" server :vlax-false)
                   (vlax-invoke-method xml 'send)
                   (if (setq str (vlax-get-property xml 'responsetext))
                     (progn
                           (vlax-put-property rgx 'global   actrue)
                           (vlax-put-property rgx 'ignorecase actrue)
                           (vlax-put-property rgx 'multilineactrue)
                           (setq str (strcat " " (itoa (jtoy (+ (atoi (substr str 2 5)) 2400000.5))) (substr str 7)))
                           (mapcar
                               (function
                                 (lambda ( a b )
                                       (vlax-put-property rgx 'pattern a)
                                       (setq format (vlax-invoke rgx 'replace format b))
                                 )
                               )
                              '("YYYY" "YY" "MO" "DD" "HH" "MM" "SS")
                              '( "$1""$2" "$3" "$4" "$5" "$6" "$7")
                           )
                           (vlax-put-property rgx 'pattern
                               (strcat
                                 "(?:[^\\d]+)([\\d]+)(?:[^\\d]+)([\\d]+)"
                                 "(?:[^\\d]+)([\\d]+)(?:[^\\d]+)([\\d]+)"
                                 "(?:[^\\d]+)([\\d]+)(?:[^\\d]+)([\\d]+)"
                                 "(?:[^\\d]+)([\\d]+)(?:.+)\\n"
                               )
                           )
                           (vlax-invoke-method rgx 'replace str format)
                     )
                   )
               )
         )
       )
   )
   (if xml(vlax-release-object xml))
   (if rgx(vlax-release-object rgx))
   (if (vl-catch-all-error-p result)
       (prompt (vl-catch-all-error-message result))
       result
   )
)
;; Julian Date to Calendar Year - Lee Mac
;; Algorithm from: Meeus, Jean.Astronomical Algorithms.
(defun jtoy ( j / a b c d )
   (setq j (fix j)
         a (fix (/ (- j 1867216.25) 36524.25))
         b (+ (- (+ j 1 a) (fix (/ a 4))) 1524)
         c (fix (/ (- b 122.1) 365.25))
         d (fix (/ (- b (fix (* 365.25 c))) 30.6001))
   )
   (fix (- c (if (< 2 (fix (if (< d 14) (1- d) (- d 13)))) 4716 4715)))
)
(vl-load-com) (princ)

Andrew1979 发表于 2022-7-5 20:08:11

谢谢BIGAL,我会调查一下,看看是否能按我想要的方式工作。非常感谢您的意见。我已经四处寻找了很长时间,试图解决这个问题。

BIGAL 发表于 2022-7-5 20:18:23

您可以将lisps自动编译为fas,也可以节省一些时间。

Andrew1979 发表于 2022-7-5 20:24:07

好的,谢谢你的小费。
我无法理解代码/我只想从网站上读取文本文件-http://thirdistudio.com.au/TestInfo.txt
 
我不需要做任何格式化,只需阅读文本文件。
 
有什么办法可以做到吗?
 
谢谢

BIGAL 发表于 2022-7-5 20:31:26

这太容易了,不过完全归功于李·麦克
 

(defun pingserver ( / xml str)
(setq server "http://thirdistudio.com.au/TestInfo.txt") ; I would change this to get passed a unique filename
(setq xml (vlax-create-object "MSXML2.XMLHTTP.3.0"))
(vlax-invoke-method xml 'open "POST" server :vlax-false)
(vlax-invoke-method xml 'send)
(setq str (vlax-get-property xml 'responsetext))
; got your file !!!!!

;do your bit here

(if xml(vlax-release-object xml))
)

Andrew1979 发表于 2022-7-5 20:43:15

好的,谢谢你,我真的很感激。它现在对我起作用了,尽管你可能想编辑代码,在末尾添加另一个括号:vlax false-对我来说不算太多,但任何可能只是复制和发布代码的人都没有意识到为什么它不起作用,只会得到一个格式错误的列表。。。。(我喜欢这些错误,尤其是当有数百行代码时。)
再次感谢。

Lee Mac 发表于 2022-7-5 20:47:28

谢谢你的推荐BIGAL
 
注意不要创建MSXML对象的多个实例,还要确保释放该对象的所有引用,因为AutoCAD不会自动从内存中释放此类对象!

BIGAL 发表于 2022-7-5 20:57:14

谢谢大家,一定是复制和粘贴不正确,李,我想知道如何关闭链接,我只是猜测了一点关于代码和令人惊讶的是多么简单。尝试了open的“CLOSE”安装,但vlax版本也这么做。
 
Andrew这应该是你代码中的一个技巧,而不是更大代码的一部分。创建函数库比不断重复代码要容易得多。我的一部作品在图书馆里有大约69首歌曲。lsp,do say(CHECKSECURITY HARDISK)这是一个硬盘ID例程这是一个很好的锁定软件的方法让最终用户运行一个程序发送一个加密版本给你用这个文件ID.txt发回主代码ie重命名testinfo。txt作为软件的一部分。
 
要获得全部学分,请访问Lee mac。com并查找HDserial number win7。lsp
页: [1]
查看完整版本: 通过LISP连接到Web服务器