辛辛苦苦研究了半天的报文,发现我似乎用不到,立马就陷入了懵逼状态,C#应该怎么写, 请求报文头,到底什么意思,结果发现,我的脑子是真的笨。虽然不知道怎么做,但是我知道,在发呆,晚上就要加班了。。。
以下post调用接口的一个方法的代码,我忘记我是从哪找到了,再加上我自己的修改,就变成这样了,网上还有好多,但是这个注释给我这种菜鸟中的菜鸟满满的好感。
public static string Post(string postdata, string url, int timeout)
{
//ceShi.NetFramework.Helper.LogHelper.LogSave(string.Format("postdata: {0} url: {1} timeout:{2}", postdata, url, timeout));
System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接
string Err = "";//返回的错误信息
string result = "";//返回结果
HttpWebRequest request = null;
HttpWebResponse response = null;
Stream reqStream = null;
try
{
//设置最大连接数
ServicePointManager.DefaultConnectionLimit = 200;
//设置https验证方式
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(CheckValidationResult);
}
/***************************************************************
* 下面设置HttpWebRequest的相关属性
* ************************************************************/
request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Timeout = timeout * 1000;
//这个在Post的时候,一定要加上,如果服务器返回错误,他还会继续再去请求,不会使用之前的错误数据,做返回数据
request.ServicePoint.Expect100Continue = false;
//设置POST的数据类型和长度
request.ContentType = "application/json;charset=utf-8";
byte[] data = System.Text.Encoding.UTF8.GetBytes(postdata);
request.ContentLength = data.Length;
//往服务器写入数据
reqStream = request.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();
//获取服务端返回
response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
result = sr.ReadToEnd().Trim();
//ZhiFuLog.WriteLog("sr");
//result = System.IO.File.ReadAllText(@"C:\Users\Administrator\Desktop\test.txt");
//FileStream fs1 = new FileStream("c:\\TestTxt.txt", FileMode.Create, FileAccess.Write);//创建写入文件
//StreamWriter sw = new StreamWriter(fs1);//创建队列
//sw.WriteLine(result);//开始写入值
//sw.Close();
//fs1.Close();
sr.Close();
}
catch (System.Threading.ThreadAbortException e)
{
Err += e.ToString();
return Err;
}
catch (WebException e)
{
Err += e.ToString();
return Err;
}
catch (Exception e)
{
Err += e.ToString();
return Err;
}
finally
{
//关闭连接和流
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
}
while (true)
{
if (result != null && result.Trim() != "")
{
return result;
}
else
{
return Err;
}
}
}
嗯。。。。他给的接口文档, 请求报文头下边一堆传参,还有一些基础传参,嘶~这俩是一个玩意不,是?不是?是?管他呢,先传过去试试,然后把报文头下边的参数和基础参数一股脑的给他传过去,咦,竟然可以啊,返回结果了,牛逼牛逼。
public string pay(string oidList)
{
...
SortedDictionary<string, string> sParaTemp1 = new SortedDictionary<string, string>();
sParaTemp1.Add("XXXX", "XXXX");
sParaTemp1.Add("XXXX", "XXXX");
string data1 = ZF_Tools.datapost1(sParaTemp1);
string str = PayPlugin.YunZhiFu.ZhiFu.HttpUtil.Post(data1, serviceUrl, 6).Replace(" ", "");
...
}
/// <summary>
/// 得到需要传递的参数格式
/// </summary>
/// <param name="sParaTemp">参数键值</param>
/// <returns></returns>
public static string datapost1(SortedDictionary<string, string> sParaTemp)
{
Encoding myEncoding = Encoding.GetEncoding("utf-8");
StringBuilder prestr = new StringBuilder();
prestr.Append("{");
foreach (KeyValuePair<string, string> temp in sParaTemp)
{
prestr.Append("\"" + temp.Key + "\":\"" + temp.Value + "\",");
}
string ss = prestr.ToString();
ss = ss.Substring(0, ss.Length - 1);//去掉最后一个逗号
ss = ss + "}";
return ss;
}
舒服~下班回家