使用 GLib 的 GIO API 时不支持 HTTP
HTTP not supported when using GLib’s GIO APIs
我正在编写一个 GTK 应用程序,它有时会使用 HTTP 下载文件。由于我不想阻止正常执行,我显然不能使用 urllib 或 Requests,所以我尝试改用 GIO。但是,我在通过 HTTP 下载文件时收到 GLib.Error: g-io-error-quark: Operation not supported (15)
(file://
工作正常)。
from gi.repository import Gio
print(Gio.File.new_for_uri("file:///etc/profile").load_contents(None))
print(Gio.File.new_for_uri("http://example.org").load_contents(None))
第一个语句(file://
)按预期工作,但第二个语句(http://
)给出了上述错误(下面的完整输出)。在我的真实程序中,我使用的是异步版本,但是同步版本更短并且给出相同的错误。
(True, contents=b'# /etc/profile\n\n [-snip-]')
Traceback (most recent call last):
File "/tmp/gio.py", line 3, in <module>
print(Gio.File.new_for_uri("http://example.org").load_contents(None))
GLib.Error: g-io-error-quark: Operation not supported (15)
确保您安装了 GVFS 的 http
后端,并且您的程序可以访问 gvfsd
运行 开启的 D-Bus 会话总线。
GVFS 后端通常在分发包中提供,例如 gvfs-backends
。
GIO 默认不支持加载 file://
URI 以外的 URI。对于所有其他 URI,它与 GVFS 守护程序通信,后者又执行实际的 I/O.
我正在编写一个 GTK 应用程序,它有时会使用 HTTP 下载文件。由于我不想阻止正常执行,我显然不能使用 urllib 或 Requests,所以我尝试改用 GIO。但是,我在通过 HTTP 下载文件时收到 GLib.Error: g-io-error-quark: Operation not supported (15)
(file://
工作正常)。
from gi.repository import Gio
print(Gio.File.new_for_uri("file:///etc/profile").load_contents(None))
print(Gio.File.new_for_uri("http://example.org").load_contents(None))
第一个语句(file://
)按预期工作,但第二个语句(http://
)给出了上述错误(下面的完整输出)。在我的真实程序中,我使用的是异步版本,但是同步版本更短并且给出相同的错误。
(True, contents=b'# /etc/profile\n\n [-snip-]')
Traceback (most recent call last):
File "/tmp/gio.py", line 3, in <module>
print(Gio.File.new_for_uri("http://example.org").load_contents(None))
GLib.Error: g-io-error-quark: Operation not supported (15)
确保您安装了 GVFS 的 http
后端,并且您的程序可以访问 gvfsd
运行 开启的 D-Bus 会话总线。
GVFS 后端通常在分发包中提供,例如 gvfs-backends
。
GIO 默认不支持加载 file://
URI 以外的 URI。对于所有其他 URI,它与 GVFS 守护程序通信,后者又执行实际的 I/O.