【问题标题】:HttpWebResponse 401-error UnauthorizedHttpWebResponse 401-错误未经授权
【发布时间】:2015-04-19 05:47:13
【问题描述】:

我目前在尝试调用 API 时遇到 HttpWebRequest/Response 问题。

API 使用 JSON/Ajax 进行调用,但我需要通过我不完全理解的 HttpWebRequest/Response 进行调用,并且我认为我传递了错误的访问令牌。

这是我从教程中获得的当前代码:

        byte[] buffer = Encoding.ASCII.GetBytes("username=User&password=Password");

        HttpWebRequest WebReq =(HttpWebRequest)WebRequest.Create("http://api40.maildirect.se/User/Authorize");

        WebReq.Method = "POST";
        WebReq.ContentType = "application/x-www-form-urlencoded";
        WebReq.ContentLength = buffer.Length;

        Stream PostData = WebReq.GetRequestStream();

        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();

        HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();

        var status = WebResp.StatusCode; (returns OK)

        Stream _Answer = WebResp.GetResponseStream();
        StreamReader Answer = new StreamReader(_Answer);

        //Here I try to make another request, do I need to make another instance?
        WebReq = (HttpWebRequest)WebRequest.Create("http://api40.maildirect.se/Contacts?&select=ContactId,FirstName,LastName");
        WebReq.Method = "GET";
        WebReq.ContentType = "text/json; charset=utf-8";
        WebReq.Headers.Add("Authorization", Answer.ReadToEnd());

        HttpWebResponse WebResp2 = (HttpWebResponse)WebReq.GetResponse();

         ^ This is where it breaks because I'm not authorized.

API 中唯一有用的文档是我在进行其他调用时需要传递访问令牌,但我怀疑我传递了错误的令牌。

提前致谢

去性

【问题讨论】:

  • WebResp.StatusCode 返回状态 200 并不一定意味着您的身份验证成功。您需要检查响应内容。
  • 我可以访问 CanRead,还有什么需要的吗?
  • Answer 中已经有流,里面有什么?
  • 我可以访问 CanRead 和 CanTimeout,但长度和位置会引发 System.NotSupportedException。但是,base 中的 identity 和 _identity 是 null,但我不是很有经验,所以我不知道这是否重要。

标签: c# api httpwebrequest token httpwebresponse


【解决方案1】:

我发送的是 HttpWebResponse 作为令牌,而不是 StreamReader 产生的字符串。我用这个字符串值创建了一个名为 token 的新变量,并将其添加到标题“Authorization”中。

        byte[] buffer = Encoding.ASCII.GetBytes("username=Username&password=Password");
        HttpWebRequest WebReq = (HttpWebRequest) WebRequest.Create("http://api40.maildirect.se/User/Authorize");

        WebReq.Method = "POST";
        WebReq.ContentType = "application/x-www-form-urlencoded";
        WebReq.ContentLength = buffer.Length;

        Stream PostData = WebReq.GetRequestStream();

        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();

        HttpWebResponse WebResp = (HttpWebResponse) WebReq.GetResponse();

        //This token variable was something I missed creating and it also had to get the " removed to work properly.
        var token = new StreamReader(WebResp.GetResponseStream()).ReadToEnd().Replace("\"", "");

        WebReq = (HttpWebRequest) WebRequest.Create("http://api40.maildirect.se/Contacts");

        WebReq.Method = "GET";
        WebReq.ContentType = "application/json; charset=utf-8";

        // This is where another part of the problem was, sent in the wrong type to the header, but when I replaced it with the token variable it worked like a charm :)
        //WebReq.Headers.Add("Authorization", WebResp.ToString());

        WebReq.Headers.Add("Authorization", token);

        HttpWebResponse WebResp2 = (HttpWebResponse) WebReq.GetResponse();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2014-03-10
    • 2014-06-24
    • 2015-10-14
    • 2014-02-26
    相关资源
    最近更新 更多