【问题标题】:HttpWebRequest.getResponse() returning NULLHttpWebRequest.getResponse() 返回 NULL
【发布时间】:2019-01-02 01:56:38
【问题描述】:

我正在尝试创建一个控制台应用程序,该应用程序将 WebRequest 发送到网站,以便我可以从其中以 JSON 格式获取一些信息。一旦我建立了请求并尝试获得响应,我只想简单地打印出数据,但是当我调用 httpWebRequest.getResponse() 它返回 NULL。

我尝试了多种将数据发送到 url 的其他方法,但这些方法都给了我 404 或 400 错误等。这个方法至少没有给我任何错误,只是一个 NULL。

这是我用于 API 的文档的快照(尽管文档尚未完成):

这是我现在拥有的控制台应用程序代码:

    try
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.remot3.it/apv/v27/user/login");
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "POST";
            httpWebRequest.Headers.Add("developerkey", "***KEY***");
            using (var streamWriter = new

            StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string json = new JavaScriptSerializer().Serialize(new
                {
                    email = "***EMAIL***",
                    password = "***PASSWORD***"
                });
                Console.WriteLine(json);
                streamWriter.Write(json);
            }
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                Console.WriteLine(result);
                Console.ReadLine();
            }
        }catch(Exception e)
        {
            Console.WriteLine(e.Message);
            Console.WriteLine(e.StackTrace);
            Console.ReadLine();
        }

预期的输出是一些 JSON 数据,但我从 getResponse() 返回 NULL。

【问题讨论】:

    标签: c# httprequest httpresponse


    【解决方案1】:

    尝试在您的表单中序列化凭据,并将标头作为此类的参数发送。 在下面查看我的代码。它不是 100% 符合你的要求,但至少它会帮助你理解你的逻辑。

    这是我从这段代码中得到的 Json 响应。它的工作完美。请记住在您的网络请求中添加超时选项,并在完成任务后最后关闭流式阅读器和流式传输。请检查此代码。

      public static string httpPost(string url, string json)
        {
            string content = "";          
            byte[] bs;
    
            if (json != null && json != string.Empty)
            {
                bs = Encoding.UTF8.GetBytes(json);
            }
            else
            {
                bs = Encoding.UTF8.GetBytes(url);
            }
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
            req.Method = "POST";
    
            if (json != string.Empty)
                req.ContentType = "application/json";
            else
                req.ContentType = "application/x-www-form-urlencoded";
            req.KeepAlive = false;
            req.Timeout = 30000;
            req.ReadWriteTimeout = 30000;
            //req.UserAgent = "test.net";
            req.Accept = "application/json";
            req.ContentLength = bs.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(bs, 0, bs.Length);
                reqStream.Flush();
                reqStream.Close();
            }
            using (WebResponse wr = req.GetResponse())
            {
                Stream s = wr.GetResponseStream();
                StreamReader reader = new StreamReader(s, Encoding.UTF8);
                content = reader.ReadToEnd();
                wr.Close();
                s.Close();
                reader.Close();
            }
            return content;
    
        }
    

    【讨论】:

    • 所以我稍微调整了上面的代码以满足我的需要,我用我的 api 密钥在你的函数中创建了标题,然后用我的用户名和密码传入了 json 数据。它正确地发送它,没有错误,但是一旦返回到主目录,内容仍然是一个空字符串
    • 您能否发表评论并调试代码并查看您的 webResponse,然后检查流。尝试一步一步调试。当没有错误并返回空时,它有点难以回答。
    • 我在这个 webrequest 中没有看到任何问题。您是否检查了您的控制器是否收到了带有您填写此 webrequest 所需参数的此请求并返回结果。将注释放在控制器上并调试。或使用此工具之一测试您的 api link 以验证您的 api 是否正常工作
    • 刚刚尝试使用邮递员测试请求,似乎来自服务器本身的请求没有发回任何内容。猜猜是时候联系api的开发者了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2013-03-22
    • 2017-04-10
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多