分两步获取信息和内容

HttpClient有个GetInformation方法,用于获取内容信息,获取成功则返回True,否则返回False。

此方法执行之后并不会关闭和服务端的连接,我们可以继续用GetFile、GetData等方法获取内容本身。

有了这个方法,我们可以首先获取内容信息,然后根据内容信息进行下一步的操作,而无需重新连接服务器。

示例一

服务端的HttpRequest事件代码为:

Select Case e.Path
    Case "test.jpg"
        If Date.Now.Hour < 10 Then
            e.ResponseHeaders("Error") = "001"
            e.WriteString("
文件还未准备好,10点之后再下载!")
        Else
            e.WriteFile("d:\web\test.jpg")
        End If

End
Select

如果客户在上午10点之前访问,则在头部信息中加上错误标记,并返回文本形式的错误信息。

客户端代码:

Dim htc As new HttpClient("http://127.0.0.1/test.jpg")
If
  htc.GetInformation() Then
    Dim err As String  = htc.ResponseHeaders("Error")
    If  err> "" Then
        MessageBox.Show(htc.GetData() ,"
错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Else
        htc.GetFile("c:\data\test.jpg")
        MessageBox.Show("
文件下载成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
   
End If
Else

        MessageBox.Show("文件下载失败", "提示", MessageBoxButtons.OK,MessageBoxIcon.Error)

End
If


示例二

服务端可以只发送内容信息,而不发送内容,例如服务端的HttpRequest事件代码为:

Select Case e.Path
    Case "
test.jpg"
        If Date.Now.Hour < 10 Then
            e.ResponseHeaders("Error") = "The file is not ready"
            e.Handled = True
        Else
            e.WriteFile("d:\web\test.jpg")
       
End If
End Select

如果客户在上午10点之前访问,则通过头部信息返回错误"The file is not ready!"

重要提示:

1、如果不打算发送内容本身,只发送内容信息,那么务必将e参数Handled设置为True,否则客户端将持续等待,直到超时。
2、头部信息不支持中文,解决方法后面会介绍。

客户端代码:

Dim htc As new HttpClient("http://127.0.0.1/test.jpg")
If
  htc.GetInformation() Then
    Dim err As String  = htc.ResponseHeaders("Error")
    If  err> "" Then
        MessageBox.Show(err,
"
错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Else
        htc.GetFile("c:\data\test.jpg")
        MessageBox.Show(
"
文件下载成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
   
End If
Else

        MessageBox.Show("文件下载失败", "提示", MessageBoxButtons.OK,MessageBoxIcon.
Error)

End
If

第三方开发接口示例

有了GetInformation方法,我们进行第三方接口开发的时候,会更加方便,还是以上一节企业微信下载临时素材为例,改进后的代码为:

Dim ul As String = "https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token={0}&media_id={1}"
Dim
mediaID As String = "1GDEyyL7RIo868rKmIf3ThZoCMkd69VvH3wPBMpQj9w3uq7dmdxlbNjh669KPLyhF7EEOpBszls7BSmgMFgn07A"  '要获取素材的ID
Dim
hc As new HttpClient(CExp(ul,Functions.Execute("GetQYAccessToken"),mediaID))
Dim
fl As String  = "c:\data\abc.jpg" '要保存为的本地文件
If
hc.GetInformation() Then
    If hc.ResponseContentType.StartsWith("application/json") Then
        MessageBox.Show(hc.GetData())
    Else
        hc.GetFile(fl)
       
MessageBox.Show("图片素材下载成功!")
    End
If

Else

    MessageBox.Show("图片素材下载失败!")

End
If

 

 


本页地址:http://www.foxtable.com/mobilehelp/topics/3278.htm