c# 简单httpGet、httpPost方法以及http提交Form表单

该代码示例展示了如何在C#中使用HttpWebRequest类实现HTTPPOST和GET请求。POST方法用于提交表单数据,而GET方法用于获取资源。在POST请求中,数据被编码并添加到请求体中,而在GET请求中,数据作为URL的一部分传递。对于POST请求,注意设置了ContentType为application/json;charset=UTF-8,而在处理FormData时,需设置特定的ContentType和添加边界。
该文章已生成可运行项目,

httpGet和httpPost

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace HealthyCardPostApp.Helper
{
	public class HttpHelper
	{
        private static bool IsFirst = true;
		/// <summary>
		/// post
		/// </summary>
		/// <param name="postUrl">请求地址</param>
		/// <param name="paras">参数</param>
		/// <returns>string返回</returns>
		public static string PostMethod(string postUrl, string paras)
		{
			string result = "";
			string resultStr = string.Empty;

			if (string.IsNullOrWhiteSpace(postUrl))
			{
				resultStr = "发送地址为空";
			}
			else
			{
				string targetUrl = postUrl.Trim().ToString();
				try
				{
					if (targetUrl.ToLower().StartsWith("https"))
					{
						SetCertificatePolicy();
					}

					UTF8Encoding encoding = new UTF8Encoding();
					byte[] postData = encoding.GetBytes(paras);
					HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(targetUrl);
					myRequest.Method = "POST";
					myRequest.ContentType = "application/json;charset=UTF-8";
					myRequest.ContentLength = postData.Length;
					Stream newStream = myRequest.GetRequestStream();
					newStream.Write(postData, 0, postData.Length);
					newStream.Flush();
					newStream.Close();
					HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
					StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
					result = reader.ReadToEnd();
				}
				catch (Exception ex)
				{
					result = ex.Message;
				}
			}
			return result;
		}

		/// <summary>
		/// get请求方式
		/// </summary>
		/// <param name="getUrl">请求地址</param>
		/// <returns>string返回</returns>
		public static string GetMethod(string getUrl)
		{
			string result = "";
			if (string.IsNullOrWhiteSpace(getUrl))
			{
				result = "发送地址不能为空";
			}
			else
			{
				string targetUrl = getUrl.Trim().ToString();
				try
				{
					if (targetUrl.ToLower().StartsWith("https"))
					{
						SetCertificatePolicy();
					}

					HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(targetUrl);
					myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
					myRequest.Method = "GET";
					myRequest.Timeout = 30 * 60 * 1000;
					HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
					Stream newStream = myResponse.GetResponseStream();
					StreamReader reader = new StreamReader(newStream, Encoding.UTF8);
					result = reader.ReadToEnd();
				}
				catch (Exception ex)
				{
					result = ex.Message;
				}
			}
			return result;
		}


		/// <summary>
		/// https链接信任
		/// </summary>
		private static void SetCertificatePolicy()
		{
            if(!IsFirst){
                return;
            }
            IsFirst = false;
			ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) =>{
				//信任所有证书
				return true;
			};
		}

	}
}

c# 提交FormData表单数据

注意:UserAgent 必须设置

public static string PostFormMethod<T>(string url, T value)
{
	var modelType = typeof(T);
	string boundary = "--------------------------" + DateTime.Now.Ticks.ToString("x");
	string boundary2 = "--" + boundary;
	HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
	request.UserAgent = "My Platform";//重要,重要,重要!!!必须要设置的,不设置会报错
	request.Method = "POST";
	request.ContentType = $"multipart/form-data; boundary=---{boundary}";
	StringBuilder postDataStr = new StringBuilder();
	foreach (var item in modelType.GetProperties())
	{
		postDataStr.Append(boundary2 + "\r\n");
		postDataStr.Append("Content-Disposition: form-data; name=\"" + item.Name + "\"" + "\r\n\r\n");
		postDataStr.Append((item.GetValue(value)?.ToString() ?? "") + "\r\n");
	}
	postDataStr.Append(boundary2 + "--" + "\r\n");

	Stream myRequestStream = request.GetRequestStream();
	StreamWriter myStreamWriter = new StreamWriter(myRequestStream, System.Text.Encoding.UTF8);
	myStreamWriter.Write(postDataStr.ToString());
	myStreamWriter.Close();

	HttpWebResponse response = (HttpWebResponse)request.GetResponse();
	Stream myResponseStream = response.GetResponseStream();
	StreamReader myStreamReader = new StreamReader(myResponseStream, System.Text.Encoding.UTF8);
	string retString = myStreamReader.ReadToEnd();
	myStreamReader.Close();
	myResponseStream.Close();

	return retString;
}

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值