Foxtable(狐表)用户栏目专家坐堂 → HttpClient怎么捕获错误?


  共有3334人关注过本帖树形打印复制链接

主题:HttpClient怎么捕获错误?

帅哥哟,离线,有人找我吗?
luodang2050
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
HttpClient怎么捕获错误?  发帖心情 Post By:2020/7/23 15:38:00 [显示全部帖子]

如题,如下示例,假设服务端返回异常状态码,客户端怎么解析异常状态码,进行正确的响应了?用了try貌似不起作用
Dim hc As New HttpClient("http://127.0.0.1/gettime.htm")
Dim
 dt As Date = hc.GetData()
MessageBox
.Show(dt)

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2020/7/23 15:58:00 [显示全部帖子]

getData(True)是什么意思呢?看教程都是不带参数的,在哪里能看到详细用法?
另外如何获取错误后的状态码及描述,需要客户端根据状态码对应做出调整。
[此贴子已经被作者于2020/7/23 16:00:09编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2020/7/23 16:15:00 [显示全部帖子]

当200的时候可返回状态码及描述,401/400的时候返回0空信息,这个是设定上有问题么?

以下400时候返回信息,错误信息给解析到cookies里面了,理论上可以获取到状态码,但错误描述怎么办?
Accept:
UserAgent:
更新日期:00:00:00
状态码:0
状态描述:
内容类型:
内容长度:0
------Headers-------------
------cookies-------------
Error:远程服务器返回错误: (400) 错误的请求。
[此贴子已经被作者于2020/7/23 16:19:03编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2020/7/23 16:37:00 [显示全部帖子]

请问cookie里面只能取到状态码,无法取到自定义状态描述的是么?

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2020/7/23 16:51:00 [显示全部帖子]

代码如下,后端是临时测试的,错误定义为:400, "自定义错误"
Dim htc As New HttpClient("http://*.*.*.*:52081")
htc.Timeout = 3
Dim ret As object
ret  = htc.GetData(True)
If htc.StatusCode = 200 Then
    msgbox(ret)
End If

OutPut.Show("Accept:" & htc.Accept)
OutPut.Show("UserAgent:" & htc.UserAgent)
OutPut.Show("更新日期:" & htc.LastModified)
OutPut.Show("状态码:" & htc.StatusCode)
OutPut.Show("状态描述:" & htc.StatusDescription)
OutPut.Show("内容类型:" & htc.ResponseContentType)
OutPut.Show("内容长度:" & htc.ResponseContentLength)
Output.Show("------Headers-------------")
For Each key As String  In htc.ResponseHeaders.Keys  '显示服务器返回的头部信息
    OutPut.Show(Key & ":" & htc.ResponseHeaders(key))
Next
Output.Show("------cookies-------------")
For Each key As String  In htc.rCookies.Keys  '显示服务器返回的头部信息
    OutPut.Show(Key & ":" & htc.rCookies(key))
Next

结果返回如下:(不能获取到自定义错误的描述)
Accept:
UserAgent:
更新日期:00:00:00
状态码:0
状态描述:
内容类型:
内容长度:0
------Headers-------------
------cookies-------------
Error:远程服务器返回错误: (400) 错误的请求。

[此贴子已经被作者于2020/7/23 17:18:00编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2020/7/23 16:57:00 [显示全部帖子]

后端是python写的
@app.get("/")
def root():
    raise MyHTTPException(400, "自定义错误")

直接打开网址返回:
 {"detail":"自定义错误"}
[此贴子已经被作者于2020/7/23 16:59:11编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2020/7/23 17:03:00 [显示全部帖子]

直接弹出报错了,看情况是捕获不到错误描述
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.1.19.19
错误所在事件:
详细错误信息:
远程服务器返回错误: (400) 错误的请求。

[此贴子已经被作者于2020/7/23 17:03:21编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2020/7/23 17:17:00 [显示全部帖子]

好吧,exception模式更加符合设计规范,而且有些依赖的模块是强制此模式的,此控制不了。暂时只能根据自定义状态码进行区分了。谢谢

 回到顶部