之前給小伙伴的一個HttpHpler類,主要是post獲取一些數據。可能是接口的一些問題,有時候超時返回空,但是默認timeout時間又太長了。小伙伴是一個硬件相關的項目,等不了這么久,所有想自定義一個短一點的timeout時間,網上找了一些方法,照着試了下,好多都不好用。最后發現HttpClient類中直接就有Timeout屬性,自己開了個接口試了下,可以滿足需求,記錄一下。直接上代碼。
public static string HttpPostRequestAsync4Json(string Url, string strBody) { string result = ""; try { using (HttpClient http = new HttpClient()) { http.Timeout = new TimeSpan(0,0,0,0,500);//500ms未收到回復拋出異常,return Empty http.DefaultRequestHeaders.Add("User-Agent", @"Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"); http.DefaultRequestHeaders.Add("Accept", @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); HttpResponseMessage message = null; using (Stream dataStream = new MemoryStream(Encoding.UTF8.GetBytes(strBody) ?? new byte[0])) { using (HttpContent content = new StreamContent(dataStream)) { content.Headers.Add("Content-Type", "application/json"); var task = http.PostAsync(Url, content); message = task.Result; } } if (message != null && message.StatusCode == System.Net.HttpStatusCode.OK) { using (message) { result = message.Content.ReadAsStringAsync().Result; } } } } catch (Exception ex) { // throw ex; Console.WriteLine(ex.Message); } return result; }