【问题标题】:How do I fire https url with headers in VB.NET?如何在 VB.NET 中使用标头触发 https url?
【发布时间】:2022-11-24 19:37:01
【问题描述】:

我正在使用某人的 API 来获取数据。
Api 接受一个参数和一些标头。

现在在 Postman 中我创建了一个 GET 链接并且它完美地触发了。
在 VB.NET 中,我尝试了以下代码,但我收到错误 json 响应,通知该参数丢失。

以下是我的 VB.NET 代码

 Public Function MIGetGSTin(ByVal URL As String, ByVal accesstoken As String, ByVal clientID As String)
    Dim Requester As HttpWebRequest = HttpWebRequest.Create(URL)
    Requester.Method = "GET"
    Requester.Timeout = -1
    Requester.ContentType = "application/json"
    'Requester.Headers.Add("Authorization", "Bearer " & accesstoken)
    'Requester.Headers.Add("client-id", clientID)
    Requester.Headers("Authorization") = "Bearer " & accesstoken
    Requester.Headers("client-id") = clientID

    Dim ResponseStreamReader As New StreamReader(Requester.GetResponse().GetResponseStream())
    Return ResponseStreamReader.ReadToEnd()

End Function

我也试过在 vb.net 代码执行期间我获取数据,复制它并粘贴到邮递员中,它在那里工作。

作为参考,我发布了一张手册图片以运行 API 提供商提供的 url。

笔记 :下图仅供参考。其中的所有凭证数据都已更改。

同时发布我的邮递员设置

注意:邮递员回复有效。这个邮递员设置正在工作。邮递员仅供参考

我不知道我哪里错了。
请注意是否需要任何东西。
谢谢你

更新:根据@Jimi 在 cmets 中所说的也尝试过但没有用。以下是下面的新代码

Public Function MIGetGSTin(ByVal URL As String, ByVal accesstoken As String, ByVal clientID As String)
    Dim Requester As HttpWebRequest = WebRequest.CreateHttp(URL)
    Requester.Method = "GET"
    Requester.Timeout = -1
    Requester.ContentType = "application/json"
    Requester.Headers.Add(HttpRequestHeader.Authorization, $"Bearer {accesstoken}")
    Requester.Headers.Add("client-id", clientID)
    Requester.Headers.Add(HttpRequestHeader.CacheControl, "no-cache")
    'Requester.Headers.Add("Authorization", "Bearer " & accesstoken)
    'Requester.Headers("Authorization") = "Bearer " & accesstoken
    'Requester.Headers("client-id") = clientID

    Using ResponseStreamReader As New StreamReader(Requester.GetResponse().GetResponseStream())
        Return ResponseStreamReader.ReadToEnd()
    End Using

    'Dim ResponseStreamReader As New StreamReader(Requester.GetResponse().GetResponseStream())
End Function

【问题讨论】:

  • URL 是否包含?gstin=[some value]查询元组?正确的形式是[HttpWebRequest].Headers.Add(HttpRequestHeader.Authorization, $"Bearer {accesstoken}"),其他header也一样。添加Requester.Headers.Add(HttpRequestHeader.CacheControl, "no-cache")同时更改Dim Requester = WebRequest.CreateHttp(URL)中的WebRequest初始化
  • 您应该避免这种连接形式:Dim ResponseStreamReader As New StreamReader(Requester.GetResponse().GetResponseStream()):HttpWebResponse 和 Stream 都必须使用 Using 语句声明
  • 好的,我试着让你知道。
  • @Jimi No ?gstin=[some value] 是单值而不是元组或多个值的组合。 (在互联网上搜索查询元组。如果我错了请纠正我。)例如。 ?gstin=24AAHDDA1231J就是这样。
  • @Jimi 不工作我仍然收到此错误{"error":true,"message":"paramter missing"}。我按照你说的写了代码。也再次更新问题。请检查一下。

标签: c# vb.net


【解决方案1】:

好的,经过大量的努力和搜索,我发现了。
我是用网络客户端做的。

以下是我从中获得帮助的链接:How to make an HTTP get request with parameters

下面是我的代码。

Public Function GetAPIData(ByVal URL As String, ByVal accesstoken As String, ByVal clientID As String)
    Dim result As String = ""
    Using wc As New WebClient
        wc.Headers.Add(HttpRequestHeader.ContentType, "application/json")
        wc.Headers.Add(HttpRequestHeader.Authorization, $"Bearer {accesstoken}")
        wc.Headers.Add("client_id", clientID)
        result = wc.DownloadString(URL)
    End Using
    Return result
End Function

而这项工作就像魅力。
我希望这对任何人都有帮助。
谢谢你。 _/_

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多