如何使用 Savon Ruby gem 修复 SOAP API 中的 Net::ReadTimeout?

How to fix Net::ReadTimeout in SOAP API using Savon Ruby gem?

我的脚本有效,但由于某种原因它抛出 Net::ReadTimeout 错误。我推测是由于与 API 的大量连接。有什么方法可以使用 Savon 延迟超时?谢谢。

wsdl = 'https://org.my.domain/webservices/myservice.asmx?WSDL'

# Open Client Webservice
client = Savon.client(wsdl: wsdl, ssl_verify_mode: :none, ssl_version: :TLSv1, convert_request_keys_to: :none)

# Connect to Webservice - Authenticate
response = client.call(:authenticate, message: { username: 'user', password: 'pwd', organization: 'org', domain: 'my.domain' })

如果您不能减少对 API 的调用量,则需要增加读取超时。实际上,您的程序应该始终尊重它们正在交互的资源,并且应该允许其他程序在不影响性能的情况下访问它们。

如果您确实想增加读取超时,语法将取决于您使用的版本,对于版本 2.x:

client = Savon.client(
    wsdl: wsdl,
    ssl_verify_mode: :none,
    ssl_version: :TLSv1,
    convert_request_keys_to: :none,
    open_timeout: 400,
    read_timeout: 400,
)

版本 3.x:

client.http.send_timeout = 400
client.http.receive_timeout = 400

小心这些秒数。