Maison  >  Questions et réponses  >  le corps du texte

Ruby:使用openuri 发送http请求超时

在官方文档看了下,好像openuri默认不支持timeout吧?
http://www.ruby-doc.org/stdlib-2.1.1/libdoc/open-uri/rdoc/OpenURI.html

如果不能设置timeout的话,有替代品吗?

伊谢尔伦伊谢尔伦2712 Il y a quelques jours554

répondre à tous(2)je répondrai

  • ringa_lee

    ringa_lee2017-04-22 08:58:03

    https://github.com/lostisland/faraday

    conn.get do |req|
      req.url '/search'
      req.options.timeout = 5           # open/read timeout in seconds
      req.options.open_timeout = 2      # connection open timeout in seconds
    end
    

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-22 08:58:03

    Pas besoin de vous embêter, utilisez simplement Net::HTTP

    uri=URI(query_uri)
    Net::HTTP.get(uri,:read_timeout=>30)
    

    Voici l'introduction du document :

    open_timeout[RW]
    Nombre de secondes à attendre pour l'ouverture de la connexion. N'importe quel nombre peut être utilisé, y compris les nombres flottants pour des fractions de secondes. Si l'objet HTTP ne peut pas ouvrir une connexion pendant ce nombre de secondes, il déclenche une exception Net::OpenTimeout. .

    Laissez-moi le traduire d'ailleurs :

    open_timeout
    Définissez le temps d'attente maximum lors de l'ouverture d'une connexion. Sa valeur peut être n'importe quel nombre, y compris de très petits nombres à virgule flottante. Si le tableau connecté ne peut pas être ouvert dans le délai défini, une exception Net::OpenTimeout sera levée. La valeur par défaut est nulle, ce qui signifie qu'il n'y a aucune limite de temps.
    Cela limitera la demande à compléter dans un délai de 30 secondes.

    Il existe également de nombreuses autres fonctions, telles que la configuration de serveurs proxy, de certificats CA, de certificats SSL, etc.
    Vous pouvez vous référer à la documentation pour plus de détails, je n'entrerai donc pas dans les détails ici.

    répondre
    0
  • Annulerrépondre