我如何使用 Pharo 获取 Twitter 提要?

How do I get a Twitter feed using Pharo?

自从 Twitter 更改了网站设计后,我无法使用内置 Zinc 从任何帐户获取一组推文 类。它会抛出一条错误消息:ConnectionClosed: Connection closed while waiting for data

我正在使用 Pharo 5,但我不知道如何调整 ZnClient 设置以保持连接打开或达到获取数据的目的。

testTwitter
    | client |
    self ensureSocketStreamFactory.
    self isNativeSSLPluginPresent ifFalse: [ ^ self ]. 
    (client := ZnClient new) 
        get: 'https://www.twitter.com/pharoproject'.
    self assert: client isSuccess.
    self assert: (client contents includesSubstring: 'Twitter').
    client close

这是我进行的测试,它从未通过,并抛出上述错误。这里缺少什么?我使用 open-uri、openssl 和 Nokogiri 做了一个 Ruby 脚本,它很好地获取了推文。也许是 SSL 连接本身的问题?

这里的问题很容易回答,但你不会喜欢的。您的问题与 Twitter has deprecated support for TLS 1.0, TLS 1.1 on July 15/2019 这一事实有关。您的 pharo 正在使用已弃用的 TLS 进行连接。这就是您超时的原因。

解决方案?

您必须自己编译新的 SSL/TLS 支持,这不是一件容易的事。您必须至少在 TLS 1.2 中编译才能再次连接。缺少如何编译对新库的支持的 Pharo 文档。我的猜测是您使用的是 TLS 1.0(请参阅下面的注释)- 因为 Pharo 6.1(因此您的 Pharo 5.x 将具有相同或更旧的库)已针对 libssl.so.1.0.0 编译了 libgit2.so(这具有依赖性 libcurl-gnutls.so.4) - 如果您更新库,您可以 see 那些支持 >= TLS 1.2.

注:

这与我之前 post 编辑的问题有关。没有人对其投票或回答,因此它被自动删除 - 您可以投票取消删除它:(请参阅 post 的底部了解问题)。我没有答案,因为我有时间投入到我的 Smalltalk/X 项目中。

或者换成更新的 Pharo。将您的方法添加到 Pharo 8 中的 ZnHTTPSTest 就可以了(在 Pharo 8 build 686、Ubuntu 18.04.02 上测试PharoLauncher)

中具有稳定虚拟机的 LTS