Csharp:HttpWebRequest , HttpClient and RestSharp

        /// <summary>
        ///  Define other methods and classes here
        /// </summary>
        /// <param name="url"></param>
        /// <param name="contentType"></param>
        /// <returns></returns>
        public static Task<string> MakeAsyncRequest(string contentType, string contenttxt, string mobile)
        {
            string url = "http://www.dusystem.com/UserServiceAPI";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.ContentType = contentType;
            request.Method = WebRequestMethods.Http.Post; //get
            request.Timeout = 20000;
            request.Proxy = null;
            byte[] data = System.Text.Encoding.GetEncoding("gbk").GetBytes("geovindu"); //System.Text.UnicodeEncoding.ASCII.GetBytes("geovindu");//UTF8  
            Base64Encoder myEncoder = new Base64Encoder(data);
            StringBuilder sb = new StringBuilder();
            sb.Append(myEncoder.GetEncoded());
            string msg = UrlEncode(contenttxt);            
            string content = string.Format("method={0}&isLongSms={1}&username={2}&password={3}&smstype={4}&mobile={5}&content={6}", "MS", 0, "geovindu", sb.ToString(), 0, mobile, msg);//
            byte[] bytes = Encoding.GetEncoding("gbk").GetBytes(content);
            request.ContentLength = bytes.Length;
            Stream os = request.GetRequestStream();
            //req.GetResponseAsync();

            os.Write(bytes, 0, bytes.Length);
            os.Close();
            //System.Net.WebResponse resp = req.GetResponse();
            WebResponse resp = request.GetResponse();
            
            Task<WebResponse> task = Task.Factory.FromAsync(
                request.BeginGetResponse,
                asyncResult => request.EndGetResponse(asyncResult),
                (object)null);

            return task.ContinueWith(t => ReadStreamFromResponse(resp, content));
        }

        /// <summary>
        /// 对内容进行编码
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private static string UrlEncode(string str)
        {
            StringBuilder sb = new StringBuilder();
            byte[] byStr = System.Text.Encoding.GetEncoding("gbk").GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str)
            for (int i = 0; i < byStr.Length; i++)
            {
                sb.Append(@"%" + Convert.ToString(byStr[i], 16));
            }

            return (sb.ToString());
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="response"></param>
        /// <returns></returns>
        private static string ReadStreamFromResponse(WebResponse response, string content)
        {
            Stream responseStream = response.GetResponseStream();
            using (StreamReader sr = new StreamReader(responseStream))
            {
                string strContent = sr.ReadToEnd();
                return strContent;
            }
        }



        delegate string SynchOperation(string value);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="callback"></param>
        /// <param name="value"></param>
         void BeginTheSynchronousOperation(AsyncCallback callback, string value)
        {
            SynchOperation op = new SynchOperation(SynchronousOperation);
            op.BeginInvoke(value, callback, op);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
         string SynchronousOperation(string value)
        {

            string str = "geovindu";
            Thread.Sleep(10000);
            str = str + value;
            return str;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="result"></param>
         void CallbackOperation(IAsyncResult result)
        {
            // get your delegate
            var ar = result.AsyncState as SynchOperation;
            // end invoke and get value
            var returned = ar.EndInvoke(result);
            Response.Write(returned);
            
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button1_Click(object sender, EventArgs e)
        {
           BeginTheSynchronousOperation(CallbackOperation, this.TextBox1.Text.Trim());
            var task = MakeAsyncRequest("application/x-www-form-urlencoded", "geovindu", "1388888888");
            Response.Write(string.Format("Got response of {0}", task.Result));  //返回成功
        }

  第二种方法:  用HttpClient 更省代码  .net 4.6

 /// <summary>
    /// 发送
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Button1_Click(object sender, EventArgs e)
    {

        Response.Write(isFail(sendMessage("138888888", "【六福珠宝】兴高高兴,天下为公", "geovindu")));

    }

    /// <summary>
    /// 发送信息
    /// geovindu 涂聚文
    /// </summary>
    /// <param name="mobile"></param>
    /// <param name="contenttxt"></param>
    /// <param name="user"></param>
    /// <returns></returns>
    private string sendMessage(string mobile, string contenttxt, string user)
    {
        string result = string.Empty;

        Uri u = new Uri("http://www.dusystem.com/smsSend.do");
        string pwd = "geovindu";// 
        string msg = UrlEncodeNew(contenttxt);
        var payload = string.Format("username={0}&password={1}&mobile={2}&content={3}", "geovindu", pwd, mobile, msg);
        HttpContent c = new StringContent(payload, Encoding.UTF8, "application/x-www-form-urlencoded");
        var t = Task.Run(() => PostURI(u, c));
        t.Wait();
        result=t.Result;
        return result;
    }
    /// <summary>
    /// 涂聚文 Geovin Du
    ///
    /// </summary>
    /// <param name="u"></param>
    /// <param name="c"></param>
    /// <returns></returns>
    static async Task<string> PostURI(Uri u, HttpContent c)
    {
        var response = string.Empty;
        using (var client = new HttpClient())
        {
            //string url = "http://myserver/method";
            //string content = "param1=1&param2=2";
            //HttpClientHandler handler = new HttpClientHandler();
            //HttpClient httpClient = new HttpClient(handler);
            //HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, u);
            //HttpResponseMessage response = await httpClient.SendAsync(request, content);

            HttpResponseMessage result = await client.PostAsync(u, c);
            if (result.IsSuccessStatusCode)
            {
                response = result.StatusCode.ToString();
                Task<string> t = result.Content.ReadAsStringAsync();
                response = t.Result;
            }
        }
        return response;
    }


    private bool isFail(string i)
    {
        bool ok = false;
        if (double.Parse(i) > 0)
        {
            ok = true;
        }
        return ok;
    }

  

 

            //https://github.com/restsharp/RestSharp
            //https://coronavirus-tracker-api.herokuapp.com/all  Geovin Du
            var request = new RestRequest("/all", Method.GET);
            var client = new RestClient("https://coronavirus-tracker-api.herokuapp.com");
            var response = client.ExecuteTaskAsync(request).Result;
            if (response.StatusCode != HttpStatusCode.OK)
                throw new Exception($"Unable to download file");
            response.RawBytes.SaveAs(filename);

  

HttpWebRequest for control
WebClient for simplicity and brevity
RestSharp for both on non-.NET 4.5 environments
HttpClient for both + async features on .NET 4.5 environments

 

posted @ 2019-08-02 11:25  ®Geovin Du Dream Park™  阅读(673)  评论(2编辑  收藏  举报