Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
QWFLS
arduino-esp32
提交
3902aa40
A
arduino-esp32
项目概览
QWFLS
/
arduino-esp32
与 Fork 源项目一致
从无法访问的项目Fork
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
arduino-esp32
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3902aa40
编写于
11月 19, 2018
作者:
B
Bob
提交者:
Me No Dev
11月 19, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Adding path arguments to WebServer (#1994)
上级
f9d1b24c
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
113 addition
and
3 deletion
+113
-3
libraries/WebServer/examples/PathArgServer/PathArgServer.ino
libraries/WebServer/examples/PathArgServer/PathArgServer.ino
+53
-0
libraries/WebServer/src/WebServer.cpp
libraries/WebServer/src/WebServer.cpp
+5
-0
libraries/WebServer/src/WebServer.h
libraries/WebServer/src/WebServer.h
+1
-0
libraries/WebServer/src/detail/RequestHandler.h
libraries/WebServer/src/detail/RequestHandler.h
+12
-0
libraries/WebServer/src/detail/RequestHandlersImpl.h
libraries/WebServer/src/detail/RequestHandlersImpl.h
+42
-3
未找到文件。
libraries/WebServer/examples/PathArgServer/PathArgServer.ino
0 → 100644
浏览文件 @
3902aa40
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
const
char
*
ssid
=
"........"
;
const
char
*
password
=
"........"
;
WebServer
server
(
80
);
void
setup
(
void
)
{
Serial
.
begin
(
9600
);
WiFi
.
mode
(
WIFI_STA
);
WiFi
.
begin
(
ssid
,
password
);
Serial
.
println
(
""
);
// Wait for connection
while
(
WiFi
.
status
()
!=
WL_CONNECTED
)
{
delay
(
500
);
Serial
.
print
(
"."
);
}
Serial
.
println
(
""
);
Serial
.
print
(
"Connected to "
);
Serial
.
println
(
ssid
);
Serial
.
print
(
"IP address: "
);
Serial
.
println
(
WiFi
.
localIP
());
if
(
MDNS
.
begin
(
"esp32"
))
{
Serial
.
println
(
"MDNS responder started"
);
}
server
.
on
(
"/"
,
[]()
{
server
.
send
(
200
,
"text/plain"
,
"hello from esp32!"
);
});
server
.
on
(
"/users/{}"
,
[]()
{
String
user
=
server
.
pathArg
(
0
);
server
.
send
(
200
,
"text/plain"
,
"User: '"
+
user
+
"'"
);
});
server
.
on
(
"/users/{}/devices/{}"
,
[]()
{
String
user
=
server
.
pathArg
(
0
);
String
device
=
server
.
pathArg
(
1
);
server
.
send
(
200
,
"text/plain"
,
"User: '"
+
user
+
"' and Device: '"
+
device
+
"'"
);
});
server
.
begin
();
Serial
.
println
(
"HTTP server started"
);
}
void
loop
(
void
)
{
server
.
handleClient
();
}
libraries/WebServer/src/WebServer.cpp
浏览文件 @
3902aa40
...
...
@@ -509,6 +509,11 @@ void WebServer::_streamFileCore(const size_t fileSize, const String & fileName,
send
(
200
,
contentType
,
""
);
}
String
WebServer
::
pathArg
(
unsigned
int
i
)
{
if
(
_currentHandler
!=
nullptr
)
return
_currentHandler
->
pathArg
(
i
);
return
""
;
}
String
WebServer
::
arg
(
String
name
)
{
for
(
int
j
=
0
;
j
<
_postArgsLen
;
++
j
)
{
...
...
libraries/WebServer/src/WebServer.h
浏览文件 @
3902aa40
...
...
@@ -97,6 +97,7 @@ public:
virtual
WiFiClient
client
()
{
return
_currentClient
;
}
HTTPUpload
&
upload
()
{
return
*
_currentUpload
;
}
String
pathArg
(
unsigned
int
i
);
// get request path argument by number
String
arg
(
String
name
);
// get request argument value by name
String
arg
(
int
i
);
// get request argument value by number
String
argName
(
int
i
);
// get request argument name by number
...
...
libraries/WebServer/src/detail/RequestHandler.h
浏览文件 @
3902aa40
#ifndef REQUESTHANDLER_H
#define REQUESTHANDLER_H
#include <vector>
#include <assert.h>
class
RequestHandler
{
public:
virtual
~
RequestHandler
()
{
}
...
...
@@ -14,6 +17,15 @@ public:
private:
RequestHandler
*
_next
=
nullptr
;
protected:
std
::
vector
<
String
>
pathArgs
;
public:
const
String
&
pathArg
(
unsigned
int
i
)
{
assert
(
i
<
pathArgs
.
size
());
return
pathArgs
[
i
];
}
};
#endif //REQUESTHANDLER_H
libraries/WebServer/src/detail/RequestHandlersImpl.h
浏览文件 @
3902aa40
...
...
@@ -15,16 +15,55 @@ public:
,
_uri
(
uri
)
,
_method
(
method
)
{
int
numParams
=
0
,
start
=
0
;
do
{
start
=
_uri
.
indexOf
(
"{}"
,
start
);
if
(
start
>
0
)
{
numParams
++
;
start
+=
2
;
}
}
while
(
start
>
0
);
pathArgs
.
resize
(
numParams
);
}
bool
canHandle
(
HTTPMethod
requestMethod
,
String
requestUri
)
override
{
if
(
_method
!=
HTTP_ANY
&&
_method
!=
requestMethod
)
return
false
;
if
(
requestUri
!=
_uri
)
return
false
;
if
(
_uri
==
requestUri
)
return
true
;
size_t
uriLength
=
_uri
.
length
();
unsigned
int
pathArgIndex
=
0
;
unsigned
int
requestUriIndex
=
0
;
for
(
unsigned
int
i
=
0
;
i
<
uriLength
;
i
++
,
requestUriIndex
++
)
{
char
uriChar
=
_uri
[
i
];
char
requestUriChar
=
requestUri
[
requestUriIndex
];
if
(
uriChar
==
requestUriChar
)
continue
;
if
(
uriChar
!=
'{'
)
return
false
;
i
+=
2
;
// index of char after '}'
if
(
i
>=
uriLength
)
{
// there is no char after '}'
pathArgs
[
pathArgIndex
]
=
requestUri
.
substring
(
requestUriIndex
);
return
pathArgs
[
pathArgIndex
].
indexOf
(
"/"
)
==
-
1
;
// path argument may not contain a '/'
}
else
{
char
charEnd
=
_uri
[
i
];
int
uriIndex
=
requestUri
.
indexOf
(
charEnd
,
requestUriIndex
);
if
(
uriIndex
<
0
)
return
false
;
pathArgs
[
pathArgIndex
]
=
requestUri
.
substring
(
requestUriIndex
,
uriIndex
);
requestUriIndex
=
(
unsigned
int
)
uriIndex
;
}
pathArgIndex
++
;
}
return
true
;
return
requestUriIndex
>=
requestUri
.
length
()
;
}
bool
canUpload
(
String
requestUri
)
override
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录