【问题标题】:Setting Request Headers when creating a HTTP request创建 HTTP 请求时设置请求标头
【发布时间】:2018-10-23 10:22:46
【问题描述】:

我目前正在尝试使用以下代码创建一个简单的 HTTP 网络请求:

Imports System.Net
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        'Create initial 
        Dim r As HttpWebRequest = HttpWebRequest.Create(txt_Go.Text)
        'Create response
        Dim response As HttpWebResponse = r.GetResponse
        Dim responsestream As System.IO.Stream = response.GetResponseStream

        'Create a new stream reader
        Dim streamreader As New System.IO.StreamReader(responsestream)
        Dim data As String = streamreader.ReadToEnd
        streamreader.Close()

        'display data
        txt_response.Text = data
    Catch ex As Exception
        MsgBox("Improper Input")
    End Try
End Sub
End Class

如果 Windows 窗体包含供用户输入 API 的特定 URL 的文本框,则 API 根据用户的查询返回结果。我的问题是我需要设置一个包含密钥的请求标头,我不确定如何执行此操作。

这是我尝试在 C# 中实现的代码示例,我需要将其转换为能够在 VB 中使用。

using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;

namespace CSHttpClientSample
{
static class Program
{
    static void Main()
    {
        MakeRequest();
        Console.WriteLine("Hit ENTER to exit...");
        Console.ReadLine();
    }

    static async void MakeRequest()
    {
        var client = new HttpClient();
        var queryString = HttpUtility.ParseQueryString(string.Empty);

        // Request headers
        client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "{subscription key}");

        var uri = "https://dev.tescolabs.com/grocery/products/?query={query}&offset={offset}&limit={limit}&" + queryString;

        var response = await client.GetAsync(uri);
    }
 }
}`

【问题讨论】:

    标签: vb.net visual-studio


    【解决方案1】:

    在获得响应之前,您可以通过 HttpWebRequest 的 Headers property 设置请求的 HTTP 标头:

    'Create initial 
    Dim r As HttpWebRequest = HttpWebRequest.Create(txt_Go.Text)
    
    'Set the header(s) here
    r.Headers("X-Bans-Header") = "Key"
    r.Headers("X-Other-Header") = "Test"
    
    'Create response
    '...
    

    【讨论】:

    • 谢谢你。但是,当我在设置标题后运行它时,我收到错误,“未处理的异常”将我引导到 Dim response as HttpWebResponse = r.GetResponse 行,我不知道为什么会这样。
    • 能否请您发布更多详细信息,例如确切的错误消息?请使用this screenshot 中的链接复制异常详细信息并将其粘贴到此处。
    • 这似乎是特定于您正在与之交谈的主机。它关闭连接。也许您以错误的方式传递密钥,连接到错误的端口,发送错误的地址或其他内容。如果没有有关您的特定主机和请求的更多信息,这是不可能知道的。要测试标头的发送,您可以尝试将自定义标头发送到this one 等服务。
    • @Ban_F API 通常需要HTTPS 协议,这意味着SSL 握手。如果没有指定SSL 协议,则使用SSL3TLS1.0。这将导致交易几乎立即中止(这些天通常基于TLS1.2)。其他因素可能会导致连接断开。这些只是代码中最明显缺失的设置。
    • 感谢 cmets。我已经添加了来自 API 网站上的 C# 示例代码,希望您现在可以提供帮助。
    猜你喜欢
    • 2015-08-20
    • 1970-01-01
    • 2014-03-24
    • 2014-08-23
    • 2012-08-06
    • 2017-10-07
    • 2015-07-13
    • 1970-01-01
    • 2015-07-13
    相关资源
    最近更新 更多