构造访问请求
本示例可参考示例文件"CaseStudy\WebViewer\构造访问请求.Table"。
如果你看过个Foxtable的《高级开发指南》,应该熟悉HttpClient这个类。
WebViewer不管是通过Navigate和NavigateToString方法,还是通过Source属性访问网页,都无法像HttpClient这样自定义请求头和请求体。
Webviewer也可以自定义请求头和请求体,因为访问得到的内容
会在WebViewer中渲染(HttpClient做不到),这样我们就可以利用内置的DOM快速解析和获取数据,这在开发一些互联网数据获取程序(例如爬虫)时,会比HttpClient更方便。
CreateWebResourceRequest方法用于构造请求体,其语法为:
CreateWebResourceRequest(uri, method, postData)
参数说明:
| uri | 请求地址 |
| method | 请求方法,可选参数,默认为"GET",支持所有HTTP方法,如GET、POST、PUT、DELETE、HEAD等,注意必须大写 |
| postData | 请求体流,可选参数,使用"GET"方法时传入Nothing即可,使用"POST"时传入字节流 |
构造请求体之后,可以通过Headers集合设置请求头,然后将请求体传递给NavigateWithWebResourceRequest方法进行访问即可。例如:
构造GET请求
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
'1、构造请求体
Dim
request = wv.CreateWebResourceRequest("https://free.mockerapi.com/headers")
'2、设置请求头
request.Headers.SetHeader("Authorization",
"Foxtable")
request.Headers.SetHeader("User-Agent",
"WebViewer")
request.Headers.SetHeader("Custom-Param",
"Foxtable 2008")
'3、访问
wv.NavigateWithWebResourceRequest(request)
构造POST请求
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
'1.构造表单数据
Dim
formData
As
String
=
"username=test&password=123456&remember=1"
Dim
dataBytes
As
Byte()
= Encoding.UTF8.GetBytes(formData)
'将表单数据转成字节数组
Dim
postStream
As
New
MemoryStream(dataBytes)
'将字节数组转成字节流
'2.构造POST请求体
Dim
request = wv.CreateWebResourceRequest(
"https://free.mockerapi.com/post",
"POST",
postStream)
'3.设置表单访问的请求头,这是必须的
request.Headers.SetHeader("Content-Type",
"application/x-www-form-urlencoded; charset=utf-8")
'4.访问
wv.NavigateWithWebResourceRequest(request)
构造JSON请求
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
'1.构造JSON数据流
Dim
json
As
String
=
"{""userName"":""test"",""age"":20,""status"":1}"
'JSON字符串
Dim
jsonBytes
As
Byte()
= Encoding.UTF8.GetBytes(json)
'将JSON字符串转成字节数组
Dim
jsonStream
As
New
MemoryStream(jsonBytes)
'将字节数组转成字节流
' 2. 创建请求体
Dim
request = wv.CreateWebResourceRequest(
"https://free.mockerapi.com/post",
"POST",
jsonStream)
'3.JSON一般用设置Content-Type
request.Headers.SetHeader("Content-Type",
"application/json; charset=utf-8")
'4.通常还需要一些授权设置
request.Headers.SetHeader("Authorization",
"Bearer
你的Token")
'5.访问
wv.NavigateWithWebResourceRequest(request)