簡體   English   中英

C# HttpClient 用法

[英]C# HttpClient usage

我正在嘗試使用 HttpClient 和異步編寫以下代碼,但它無法返回數據。

        WebRequest request = WebRequest.Create("some_url");
        request.Headers.Add("cookie", "some_cookie");

        Stream objStream = request.GetResponse().GetResponseStream();
        StreamReader objReader = new StreamReader(objStream);
        string sLine = "";
        int i = 0;
        while (sLine != null)
        {
            i++;
            sLine = objReader.ReadLine();
            if (sLine != null)
                Console.WriteLine(sLine);
        }

這是我嘗試過的。

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("cookie", "some_cookie");
            using (var response = await client.GetAsync("some_url"))
            {
                string responseData = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseData);
            }
        }

任何幫助將不勝感激。

編輯:這是使用 HttpClient 對我有用的代碼。

        var baseAddress = new Uri(baseUrl);
        using (var handler = new HttpClientHandler { UseCookies = false })
        using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
        {
            var requestMessage = new HttpRequestMessage(HttpMethod.Get, queryString);
            requestMessage.Headers.Add("cookie", cookie);
            var response = client.SendAsync(requestMessage);
            response.Wait();
            var content = response.Result.Content.ReadAsStringAsync();
            content.Wait();
            Console.WriteLine(content.Result);
        }

感謝所有的幫助。

您正在執行異步和等待,但您不是在等待返回或到達響應數據,因此以下代碼段將完成這項工作:

試試這個代碼:

  static async Task<string> HttpGetResponse()
    {
        WebRequest request = WebRequest.Create("some_url");
        request.Headers.Add("cookie", "some_cookie");
        string responseData;
        Stream objStream = request.GetResponse().GetResponseStream();
        StreamReader objReader = new StreamReader(objStream);
        string sLine = "";
        int i = 0;
        while (sLine != null)
        {
            i++;
            sLine = objReader.ReadLine();
            if (sLine != null)
                Console.WriteLine(sLine);
        }

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("cookie", "some_cookie");
            using (var response = await client.GetAsync("some_url"))
            {
                responseData = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseData);
            }
        }

        return responseData;
    }

在主要調用它是這樣的:

static void Main(string[] args)
   {
       Task<string> t = HttpGetResponse();


      //Do alot of work

       t.Wait();
       string response = t.Result;

       Console.WriteLine(response);
   }

希望這是有用的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM