C# 和Java HttpWebRequest 和 HttpURLConnection (用法对照)

Post
(JAVA)准备数据,form 表单数据

  String postBody = MessageFormat.format(
  	"access_token={0}&nsp_svc={1}&nsp_ts={2}&device_token_list={3}&payload={4}",
      URLEncoder.encode(accessToken,"UTF-8"),
      URLEncoder.encode("openpush.message.api.send","UTF-8"),
      URLEncoder.encode(String.valueOf(System.currentTimeMillis() / 1000),"UTF-8"),
      URLEncoder.encode(deviceTokens.toString(),"UTF-8"),
      URLEncoder.encode(payload.toString(),"UTF-8"));

(C#)准备数据,form 表单数据

String data = string.Format("access_token={0}&nsp_svc={1}&nsp_ts={2}&device_token_list={3}&payload={4}",
   HttpUtility.UrlEncode(accessToken, Encoding.UTF8).Replace("+", "%20"),
   HttpUtility.UrlEncode("openpush.message.api.send", Encoding.UTF8).Replace("+", "%20"),
   HttpUtility.UrlEncode((DateTimeExtensions.currentTimeMillis(new DateTime()) / 1000).ToString(), Encoding.UTF8).Replace("+", "%20"),
   HttpUtility.UrlEncode(deviceTokensString, Encoding.UTF8).Replace("+", "%20"),
   HttpUtility.UrlEncode(playloadString, Encoding.UTF8).Replace("+", "%20"));
httpPost(postUrl, postBody, 5000, 5000);
PostMessage(postUrl, data);

(C#)最简单的发送 application/x-www-form-urlencoded 格式的form 数据

  public static void PostMessage(string httpUrl, string body)
  {
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(httpUrl);

      request.Accept = "text/plain, */*; q=0.01";
      request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
      //请求方式
      request.Method = "POST";
      request.KeepAlive = false;
      request.ContentLength = body.Length;
      Stream postStream = request.GetRequestStream();
      byte[] postData = Encoding.UTF8.GetBytes(body);
      postStream.Write(postData, 0, postData.Length);
      postStream.Dispose();
      HttpWebResponse response = (HttpWebResponse)request.GetResponse();

      Stream myResponseStream = response.GetResponseStream();

      StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
      retString = myStreamReader.ReadToEnd();
  }

(JAVA)最简单的发送 application/x-www-form-urlencoded 格式的form 数据

  public static String httpPost(String httpUrl, String data, int connectTimeout, int readTimeout) throws IOException
    {
        OutputStream outPut = null;
        HttpURLConnection urlConnection = null;
        InputStream in = null;    
        try
        {
            URL url = new URL(httpUrl);
            urlConnection = (HttpURLConnection)url.openConnection();          
            urlConnection.setRequestMethod("POST");
            urlConnection.setDoOutput(true);
            urlConnection.setDoInput(true);
            urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
            urlConnection.setConnectTimeout(connectTimeout);
            urlConnection.setReadTimeout(readTimeout);
            urlConnection.connect();
            // POST data
            outPut = urlConnection.getOutputStream();
            outPut.write(data.getBytes("UTF-8"));
            outPut.flush();
            
            // read response
            if (urlConnection.getResponseCode() < 400)
            {
                in = urlConnection.getInputStream();
            }
            else
            {
                in = urlConnection.getErrorStream();
            }
            
            List<String> lines = IOUtils.readLines(in, urlConnection.getContentEncoding());
            StringBuffer strBuf = new StringBuffer();
            for (String line : lines)
            {
                strBuf.append(line);
            }
            System.out.println(strBuf.toString());
            return strBuf.toString();
        }
        finally
        {
            IOUtils.closeQuietly(outPut);
            IOUtils.closeQuietly(in);
            if (urlConnection != null)
            {
                urlConnection.disconnect();
            }
        }
    }

(C#) HttpClient 异步请求

        public static async void httpPostMessage(string httpUrl, string dviceToken, string payload)
        {
            var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.None };
            using (var httpclient = new HttpClient(handler))
            {          
                httpclient.BaseAddress = new Uri(httpUrl);
                httpclient.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
                httpclient.DefaultRequestHeaders.Add("Keep-Alive", "timeout=6000");

                var contents = new FormUrlEncodedContent(new Dictionary<string, string>(){
                    {"access_token", HttpUtility.UrlEncode(accessToken, Encoding.UTF8) },
                    {"nsp_svc",HttpUtility.UrlEncode("openpush.message.api.send", Encoding.UTF8) },
                    {"nsp_ts", HttpUtility.UrlEncode((DateTimeExtensions.currentTimeMillis(new DateTime())/ 1000).ToString(), Encoding.UTF8) },
                    {"device_token_list", HttpUtility.UrlEncode(dviceToken , Encoding.UTF8) },
                    {"payload", HttpUtility.UrlEncode(payload, Encoding.UTF8) }
                });
                var response = await httpclient.PostAsync("", contents);
                var code = response.StatusCode;
                if (code == HttpStatusCode.OK)
                {
                    Console.WriteLine("httpPostMessage await 2");
                    Stream myResponseStream = await response.Content.ReadAsStreamAsync();
                    StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                    retString = myStreamReader.ReadToEnd();
                    Console.WriteLine(retString);
                    Console.WriteLine("httpPostMessage await 3");
                    myStreamReader.Close();
                    myResponseStream.Close();

                }
            }
        }
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值