gpt4 book ai didi

ruby - 为什么 open ('uri' ).read 会删除响应数据?

转载 作者:太空宇宙 更新时间:2023-11-03 18:06:26 25 4
gpt4 key购买 nike

如果我打开一个 URI 并读取如下响应:

response = open("https://www.example.com")
result = response.read

这很好用,但如果我再次调用 response.read,则会返回一个空字符串。这似乎是奇怪的行为。为什么会这样?

最佳答案

这是因为 OpenURI 返回一个 Tempfile对象,它是 File 类的特殊实现:

A Tempfile objects behaves just like a File object, and you can perform all the usual file operations on it: reading data, writing data, changing its permissions, etc. So although this class does not explicitly document all instance methods supported by File, you can in fact call any File instance method on a Tempfile object.

File 类的父类是一个IO 对象。这意味着当您调用 read 时,您正在调用 IO implementation of the method .

所有这些意味着您在执行 response.read 时正在读取文件,并且一直读取到文件末尾。这就是为什么您在第二次读取时得到空字符串的原因,因为您正尝试从文件末尾读取内容,该文件什么也没有。

这里有一种检查方法,看看发生了什么:

require 'open-uri'
response = open('http://google.com')
puts response.class # => Tempfile

puts response.read # => <!doctype html><html ...
puts response.pos # => 10941

puts response.read # => ""
response.rewind
puts response.pos # => 0
puts response.read # => <!doctype html><html ...

关于ruby - 为什么 open ('uri' ).read 会删除响应数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44309517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com