【问题标题】:Add Custom Headers using HttpWebRequest使用 HttpWebRequest 添加自定义标头
【发布时间】:2012-04-08 05:02:37
【问题描述】:

我不确定这些突出显示的值是什么类型的标头,但是我应该如何使用 HttpWebRequest 添加它们?

突出显示的部分是否被视为 http 请求的主体或标头数据?也就是说,哪种方式是正确的?

这是我目前使用的代码:

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("/securecontrol/reset/passwordreset");
request.Headers.Add("Authorization", "Basic asdadsasdas8586");
request.ContentType = "application/x-www-form-urlencoded";
request.Host = "www.xxxxxxxxxx.com";
request.Method = "POST";
request.Proxy = null;
request.Headers.Add("&command=requestnewpassword");
request.Headers.Add("&application=netconnect");

但是我应该改用以下来构建上面的 Http 请求吗?

string reqString = "&command=requestnewpassword&application=netconnect";
byte[] requestData = Encoding.UTF8.GetBytes(reqString);

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("/securecontrol/reset/passwordreset");
request.Headers.Add("Authorization", "Basic ashAHasd87asdHasdas");
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = requestData.Length;
request.Proxy = null;
request.Host = "www.xxxxxxxxxx.com";
request.Method = "POST";

using (Stream st = request.GetRequestStream())
st.Write(requestData, 0, requestData.Length);

【问题讨论】:

  • 您的第一个代码 sn-p 应该可以正常工作,但是要验证数据是否确实在标头中,您是否尝试在 Wireshark 或类似的东西中查看数据包?在 Wireshark 中,您可以右键单击一个数据包,选择在新窗口中打开它,然后展开“超文本传输​​协议”部分。
  • @M. Babcock:它们不一样,我更改了代码中的值。
  • @Lander :我正在使用一个非常安全的服务器,实际代码如此之大,不幸的是似乎需要时间来测试它:/

标签: c# http-headers


【解决方案1】:

创建服务、添加标头和读取 JSON 响应的简单方法,

private static void WebRequest()
{
    const string WEBSERVICE_URL = "<<Web Service URL>>";
    try
    {
        var webRequest = System.Net.WebRequest.Create(WEBSERVICE_URL);
        if (webRequest != null)
        {
            webRequest.Method = "GET";
            webRequest.Timeout = 20000;
            webRequest.ContentType = "application/json";
            webRequest.Headers.Add("Authorization", "Basic dcmGV25hZFzc3VudDM6cGzdCdvQ=");
            using (System.IO.Stream s = webRequest.GetResponse().GetResponseStream())
            {
                using (System.IO.StreamReader sr = new System.IO.StreamReader(s))
                {
                    var jsonResponse = sr.ReadToEnd();
                    Console.WriteLine(String.Format("Response: {0}", jsonResponse));
                }
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

【讨论】:

  • 完美!这正是我的标题所需要的。谢谢。
  • 很高兴帮助@Vippy
  • 这很好用,但在我的情况下,我需要执行以下操作:myHttpWebRequest.Headers.Add("Authorization", "Basic" + Convert.ToBase64String(Encoding.Default.GetBytes(username + " :"+密码")));
【解决方案2】:

恕我直言,它被视为格式错误的标头数据。

您实际上希望将这些名称值对作为请求内容发送(这是 POST 的工作方式)而不是作为标题

第二种方法是正确的。

【讨论】:

  • 好的,谢谢,我同意你的看法,我只是想确保我做得很好。
  • 虽然这可能不是最佳实践,但有时需要在 HTTP 请求中发送标头,尤其是在使用某些 API 时。
猜你喜欢
  • 2012-01-21
  • 2010-10-09
  • 2018-07-25
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
相关资源
最近更新 更多