Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
deno
提交
2c503000
D
deno
项目概览
张重言
/
deno
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
deno
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2c503000
编写于
3月 19, 2019
作者:
R
Ryan Dahl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add async version of http_util::fetch_sync_string
上级
fa3c3530
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
8 deletion
+25
-8
cli/http_util.rs
cli/http_util.rs
+25
-8
未找到文件。
cli/http_util.rs
浏览文件 @
2c503000
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
use
crate
::
errors
;
use
crate
::
errors
::{
DenoError
,
DenoResult
};
use
crate
::
errors
::
DenoError
;
use
crate
::
errors
::
DenoResult
;
use
crate
::
tokio_util
;
use
futures
::
future
::{
loop_fn
,
Loop
};
use
futures
::{
future
,
Future
,
Stream
};
use
hyper
;
...
...
@@ -53,14 +53,20 @@ fn resolve_uri_from_location(base_uri: &Uri, location: &str) -> Uri {
}
}
// The CodeFetch message is used to load HTTP javascript resources and expects a
// synchronous response, this utility method supports that.
/// Synchronously fetchs the given HTTP URL. Returns (content, media_type).
pub
fn
fetch_sync_string
(
module_name
:
&
str
)
->
DenoResult
<
(
String
,
String
)
>
{
tokio_util
::
block_on
(
fetch_string
(
module_name
))
}
/// Asynchronously fetchs the given HTTP URL. Returns (content, media_type).
pub
fn
fetch_string
(
module_name
:
&
str
,
)
->
impl
Future
<
Item
=
(
String
,
String
),
Error
=
DenoError
>
{
let
url
=
module_name
.parse
::
<
Uri
>
()
.unwrap
();
let
client
=
get_client
();
// TODO(kevinkassimo): consider set a max redirection counter
// to avoid bouncing between 2 or more urls
l
et
fetch_future
=
l
oop_fn
((
client
,
url
),
|(
client
,
url
)|
{
loop_fn
((
client
,
url
),
|(
client
,
url
)|
{
client
.get
(
url
.clone
())
.map_err
(
DenoError
::
from
)
...
...
@@ -98,9 +104,7 @@ pub fn fetch_sync_string(module_name: &str) -> DenoResult<(String, String)> {
body
.join
(
future
::
ok
(
content_type
))
})
.and_then
(|(
body_string
,
maybe_content_type
)|
{
future
::
ok
((
body_string
,
maybe_content_type
.unwrap
()))
});
tokio_util
::
block_on
(
fetch_future
)
})
}
#[test]
...
...
@@ -115,6 +119,19 @@ fn test_fetch_sync_string() {
});
}
#[test]
fn
test_fetch_string
()
{
// Relies on external http server. See tools/http_server.py
tokio_util
::
init
(||
{
let
(
p
,
m
)
=
fetch_string
(
"http://127.0.0.1:4545/package.json"
)
.wait
()
.unwrap
();
println!
(
"package.json len {}"
,
p
.len
());
assert
!
(
p
.len
()
>
1
);
assert
!
(
m
==
"application/json"
)
});
}
#[test]
fn
test_fetch_sync_string_with_redirect
()
{
// Relies on external http server. See tools/http_server.py
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录