- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图让一段打开 http 连接的代码工作。然而,网页可以以纯文本或 gzip 格式传输。因此,具有实用主义的代码会尝试以纯文本形式打开,如果失败并接收到异常,则尝试使用 gzip 编码。
URL 是接地的唯一变量。尝试使用 URL = ' http://releases.llvm.org/6.0.0/tools/clang/docs/ClangCommandLineReference.html ' 例如。
user::catch(
(
user::http_open(URL, DataStream, []),
user::load_html(stream(DataStream), Terms, []),
user::close(DataStream)
),
_
,
(
user::open_any(URL, read, GZipDataStream, CloseIt, [encoding(gzip), string(atom)]),
/*user::http:encoding_filter(gzip, DataStream, GZipDataStream),*/
user::load_html(stream(GZipDataStream), Terms, []),
user::close_any(CloseIt)
)
)
不幸的是,catch 的恢复部分不起作用。
有什么建议吗?
最佳答案
目标中的 user::
前缀表明您发布的代码是 Logtalk 的片段。如果是这样,它就是在滥用 Logtalk 源代码并创建对 SWI-Prolog 自动加载机制的依赖。为了清晰和弹性,可以重写代码。这样做并修复其中的错误(必须加载 library(zlib)
才能使 http:encoding_filter/3
过滤器可用)导致以下解决方案:
:- use_module(library(http/http_open), []).
:- use_module(library(sgml), []).
:- use_module(library(iostream), []).
:- use_module(library(zlib), []).
:- object(html).
:- public(get_url/2).
% override ambiguous meta-predicate template
:- meta_predicate(sgml:load_html(*,*,*)).
get_url(URL, Terms) :-
catch(
setup_call_cleanup(
http:http_open(URL, DataStream, []),
sgml:load_html(stream(DataStream), Terms, []),
close(DataStream)
),
_,
setup_call_cleanup(
iostream:open_any(URL, read, DataStream, CloseIt, [string(atom)]),
sgml:load_html(stream(DataStream), Terms, []),
iostream:close_any(CloseIt)
)
).
:- end_object.
setup_call_cleanup/3
调用确保在出现错误时关闭打开的流。
假设上面的对象保存在 html.lgt
文件中,下面的示例调用显示它适用于您发布的 URL:
?- {html}.
...
% (0 warnings)
true.
?- html::get_url('http://releases.llvm.org/6.0.0/tools/clang/docs/ClangCommandLineReference.html', Terms).
Terms = [element(html, [xmlns='http://www.w3.org/1999/xhtml'], [element(head, [], [element(meta, ['http-equiv'='Content-Type', content='text/html; charset=utf-8'], []), element(title, [], ['Clang command line argument reference — Clang 6 documentation']), element(link, [... = ...|...], []), element(link, [...|...], []), element(..., ..., ...)|...]), element(body, [role=document], [' ', element(div, [... = ...|...], [element(..., ..., ...)|...]), '\n ', element(..., ..., ...)|...])])].
关于http - swi序言8.0.2 : gziped http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55093415/
我最近在此 Thoughtbot blog post 之后在我的 Rails 4 应用程序上启用了 GZIP我还添加了 use Rack::Deflater按照 this post 的建议添加到我的
我想知道 nginx 是否可以将 gzip 压缩的内容保存在缓存中,或者它一直 gzip 文件? 通过“保留缓存”,我的意思是内存或磁盘中的某些东西,在服务器端(没有浏览器缓存)。 因为我看到静态压缩
我试图让一段打开 http 连接的代码工作。然而,网页可以以纯文本或 gzip 格式传输。因此,具有实用主义的代码会尝试以纯文本形式打开,如果失败并接收到异常,则尝试使用 gzip 编码。 URL 是
我需要向 Web 服务器发送 POST 请求,并能够读取该服务器发送的响应。 我尝试使用带有以下代码的 HTTPBuilder 库: def http = new HTTPBuilder('http:
我的代码如下所示,但我无法成功获得响应。我的代码有什么问题吗? 代码: $headers = array('Content-Type: text/xml;charset=UTF-8','Content
我正在尝试做一个接受压缩响应的请求 var request = (HttpWebRequest)HttpWebRequest.Create(requestUri); request.Headers.A
这是我尝试过的随机顺序的列表: AddHandler application/x-httpd-php .otf AddType default_mimetype auto_prepend_file =
我启用了 Amazon CloudFront gzip 功能:“Compress Objects Automatically”。 我的 CloudFront 中的所有文件都会发生这种情况,而其他 CS
为什么 IE 10 和 11 无法加载 GZiped 内容(js 和 css)?当我从支持 gzip 压缩的服务器加载页面时,IE 加载第一个 HTML 页面但无法加载其他 js 和 css 文件。在
我是一名优秀的程序员,十分优秀!