之前给小伙伴的一个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; }