在尝试进行网页抓取时,我遇到了 Dexador 库的问题(以及 Drakma 库的相同问题)。它们在处理 HTTP 请求时工作正常,但在处理 HTTPS 请求时收到错误。以下是我发送的基本获取请求的示例:
(defvar *url* "https://www.amazon.com/")
(defvar *request* (dex:get *url*))
然后我收到这个回溯:
No OpenSSL version number could be determined, both SSLeay and OpenSSL_version_num failed.
所以我假设 OpenSSL 库可能有问题,但我不能 100% 确定发生了什么。我通过命令行在 Windows 计算机上成功实现了请求,并且 OpenSSL 在我的 Windows 10 计算机上运行良好,但在 Common Lisp 中则不行。
我看到的一个解决方案是将关键字参数 insecure 设置为 true:
(defvar *request* (dex:get *url* :insecure t))
但这不起作用并且收到相同的错误。当我尝试抓取 http 网站时,请求成功:
(defvar *request* (dex:get "http://paulgraham.com"))
我想知道是否有其他人遇到过这个问题,以及是否有人找到了任何解决方案。我不知道这是Windows 10的问题、依赖库的问题还是其他的问题。
这可以在命令行中正常工作:
curl -v "https://www.amazon.com"
最佳答案
这里的问题是我的 OpenSSL 版本太新。 CL+SSL是Dexador的依赖项,CL+SSL想要1.0.1版本,并且它特别想要32位版本的OpenSSL。在尝试了各种版本之后,这似乎解决了问题。
关于web-scraping - Dexador 没有 OpSSL 版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58987081/