淘宝API工具类:
Code
1
using System;
2
using System.IO;
3
using System.Net;
4
using System.Text;
5
using System.Collections;
6
using System.Collections.Generic;
7
8
9
namespace TaoBao.API.Common
10
{
11
/// <summary>
12
/// WEB工具类
13
/// </summary>
14
public abstract class WebCommon
15
{
16
public static string DoPost(string pmUrl, IDictionary<string, string> pmParams)
17
{
18
19
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(pmUrl);
20
req.Method = "POST";
21
req.KeepAlive = true;
22
req.ContentType = "application/x-www-form-urlencoded";
23
24
byte[] postData = Encoding.UTF8.GetBytes(BuildPostData(pmParams));
25
Stream reqStream = req.GetRequestStream();
26
reqStream.Write(postData, 0, postData.Length);
27
reqStream.Close();
28
29
HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
30
Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
31
return GetResponseAsString(rsp, encoding);
32
33
}
34
35
public static string DoGet(string pmUrl, IDictionary<string, string> pmParams)
36
{
37
38
if (pmParams != null && pmParams.Count > 0)
39
{
40
if (pmUrl.Contains("?"))
41
{
42
pmUrl = pmUrl + "&" + BuildPostData(pmParams);
43
}
44
else
45
{
46
pmUrl = pmUrl + "?" + BuildPostData(pmParams);
47
}
48
}
49
50
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(pmUrl);
51
req.Method = "GET";
52
req.KeepAlive = true;
53
req.ContentType = "application/x-www-form-urlencoded";
54
55
HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
56
Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
57
return GetResponseAsString(rsp, encoding);
58
59
}
60
public static string DoPost(string pmUrl, IDictionary<string, string> pmTextParams, IDictionary<string, string> pmFileParams) {
61
62
string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
63
64
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(pmUrl);
65
req.Method = "POST";
66
req.KeepAlive = true;
67
req.ContentType = "multipart/form-data;boundary=" + boundary;
68
69
Stream reqStream = req.GetRequestStream();
70
byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
71
byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
72
73
// 组装文本请求参数
74
string entryTemplate = "Content-Disposition:form-data;name=\"{0}\"\r\nContent-Type:text/plain\r\n\r\n{1}";
75
IEnumerator<KeyValuePair<string, string>> textEnum = pmTextParams.GetEnumerator();
76
while (textEnum.MoveNext())
77
{
78
string formItem = string.Format(entryTemplate, textEnum.Current.Key, textEnum.Current.Value);
79
byte[] itemBytes = Encoding.UTF8.GetBytes(formItem);
80
reqStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
81
reqStream.Write(itemBytes, 0, itemBytes.Length);
82
}
83
84
// 组装文件请求参数
85
string fileTemplate = "Content-Disposition:form-data;name=\"{0}\";filename=\"{1}\"\r\nContent-Type:{2}\r\n\r\n";
86
IEnumerator<KeyValuePair<string, string>> fileEnum = pmFileParams.GetEnumerator();
87
while (fileEnum.MoveNext())
88
{
89
string key = fileEnum.Current.Key;
90
string path = fileEnum.Current.Value;
91
string fileItem = string.Format(fileTemplate, key, path, GetMimeType(path));
92
byte[] itemBytes = Encoding.UTF8.GetBytes(fileItem);
93
reqStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
94
reqStream.Write(itemBytes, 0, itemBytes.Length);
95
96
using (Stream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
97
{
98
byte[] buffer = new byte[1024];
99
int readBytes = 0;
100
while ((readBytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
101
{
102
reqStream.Write(buffer, 0, readBytes);
103
}
104
}
105
}
106
107
reqStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
108
reqStream.Close();
109
110
HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
111
Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
112
return GetResponseAsString(rsp, encoding);
113
}
114
/// <summary>
115
/// 把响应流转换为文本。
116
/// </summary>
117
/// <param name="rsp">响应流对象</param>
118
/// <param name="encoding">编码方式</param>
119
/// <returns>响应文本</returns>
120
private static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
121
{
122
StringBuilder result = new StringBuilder();
123
Stream stream = null;
124
StreamReader reader = null;
125
126
try
127
{
128
// 以字符流的方式读取HTTP响应
129
stream = rsp.GetResponseStream();
130
reader = new StreamReader(stream, encoding);
131
132
// 每次读取不大于512个字符,并写入字符串
133
char[] buffer = new char[512];
134
int readBytes = 0;
135
while ((readBytes = reader.Read(buffer, 0, buffer.Length)) > 0)
136
{
137
result.Append(buffer, 0, readBytes);
138
}
139
}
140
finally
141
{
142
// 释放资源
143
if (reader != null) reader.Close();
144
if (stream != null) stream.Close();
145
if (rsp != null) rsp.Close();
146
}
147
148
return result.ToString();
149
}
150
151
/// <summary>
152
/// 根据文件名后缀获取图片型文件的Mime-Type。
153
/// </summary>
154
/// <param name="filePath">文件全名</param>
155
/// <returns>图片文件的Mime-Type</returns>
156
private static string GetMimeType(string filePath)
157
{
158
string mimeType;
159
160
switch (Path.GetExtension(filePath).ToLower())
161
{
162
case ".bmp": mimeType = "image/bmp"; break;
163
case ".gif": mimeType = "image/gif"; break;
164
case ".ico": mimeType = "image/x-icon"; break;
165
case ".jpeg": mimeType = "image/jpeg"; break;
166
case ".jpg": mimeType = "image/jpeg"; break;
167
case ".png": mimeType = "image/png"; break;
168
default: mimeType = "application/octet-stream"; break;
169
}
170
171
return mimeType;
172
}
173
174
/// <summary>
175
/// 组装普通文本请求参数。
176
/// </summary>
177
/// <param name="parameters">Key-Value形式请求参数字典</param>
178
/// <returns>URL编码后的请求数据</returns>
179
private static string BuildPostData(IDictionary<string, string> parameters)
180
{
181
StringBuilder postData = new StringBuilder();
182
bool hasParam = false;
183
184
IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
185
while (dem.MoveNext())
186
{
187
string name = dem.Current.Key;
188
string value = dem.Current.Value;
189
// 忽略参数名或参数值为空的参数
190
if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
191
{
192
if (hasParam)
193
{
194
postData.Append("&");
195
}
196
197
postData.Append(name);
198
postData.Append("=");
199
postData.Append(Uri.EscapeDataString(value));
200
hasParam = true;
201
}
202
}
203
204
return postData.ToString();
205
}
206
207
}
208
}
209
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Xml;
6
using System.Xml.Serialization;
7
using System.IO;
8
9
namespace TaoBao.API.Common
10
{
11
/// <summary>
12
/// 操作XML常用方法集合
13
/// </summary>
14
public class XMLCommon
15
{
16
17
/// <summary>
18
/// 将XML文档转换成实例对象
19
/// </summary>
20
/// <typeparam name="T">对象类型</typeparam>
21
/// <param name="pmFileName">文件名</param>
22
/// <returns>实例对象</returns>
23
public static T DeserializeFile<T>(string pmFileName)
24
{
25
FileStream fs = new FileStream(pmFileName, FileMode.Open);
26
XmlSerializer xs = new XmlSerializer(typeof(T));
27
T tObjext = (T)xs.Deserialize(fs);
28
fs.Close();
29
fs.Dispose();
30
return tObjext;
31
}
32
33
/// <summary>
34
/// 将实例对象写入XML文档
35
/// </summary>
36
/// <typeparam name="T">对象类型</typeparam>
37
/// <param name="pmFileName">文件名</param>
38
/// <param name="pmT">实例对象</param>
39
public static void SerializeFile<T>(string pmFileName, T pmT)
40
{
41
42
XmlSerializer serializer = new XmlSerializer(pmT.GetType());
43
TextWriter writer = new StreamWriter(pmFileName);
44
serializer.Serialize(writer, pmT);
45
writer.Close();
46
}
47
48
49
/// <summary>
50
/// 将XML字符串转换成对象
51
/// </summary>
52
/// <typeparam name="T">对象类型</typeparam>
53
/// <param name="pmXMLString">XML字符串</param>
54
/// <returns>实例对象</returns>
55
public static T DeserializeXML<T>(string pmXMLString) {
56
57
XmlSerializer xs = new XmlSerializer(typeof(T));
58
T tObjext = (T)xs.Deserialize(new StringReader(pmXMLString));
59
return tObjext;
60
}
61
62
/// <summary>
63
/// 将Josn字符串转换成对象
64
/// </summary>
65
/// <typeparam name="T">对象类型</typeparam>
66
/// <param name="pmXMLString">Josn字符串</param>
67
/// <returns>实例对象</returns>
68
public static T DeserializeJSON<T>(string pmXMLString)
69
{
70
XmlSerializer xs = new XmlSerializer(typeof(T));
71
T tObjext = (T)xs.Deserialize(new StringReader(pmXMLString));
72
return tObjext;
73
}
74
75
76
/// <summary>
77
/// 将实例对象转换成键值对集合
78
/// </summary>
79
/// <typeparam name="T">对象类型</typeparam>
80
/// <param name="pmT">实例对象</param>
81
/// <returns>键值对集合</returns>
82
public static Dictionary<string,string> DeserializeClass<T>(T pmT)
83
{
84
UTF8Encoding utf8 = new UTF8Encoding();
85
Dictionary<string, string> reValue = new Dictionary<string, string>();
86
string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff")+"xmlfile.xml";
87
SerializeFile(filename, pmT);
88
FileStream fs = new FileStream(filename, FileMode.Open);
89
XmlDocument document = new XmlDocument();
90
document.Load(fs);
91
foreach(XmlNode child in document.DocumentElement.ChildNodes){
92
93
reValue.Add(child.Name, utf8.GetString(utf8.GetBytes(child.InnerText)));
94
}
95
fs.Close();
96
fs.Dispose();
97
//File.Delete(filename);
98
return reValue;
99
}
100
101
/// <summary>
102
/// 将键值对集合转成字符串
103
/// </summary>
104
/// <param name="pmDictionary">键值对集合</param>
105
/// <returns>字符串</returns>
106
public static string GetParams(IDictionary<string, string> pmDictionary)
107
{
108
System.Collections.IEnumerator iter = pmDictionary.Keys.GetEnumerator();
109
System.Text.StringBuilder orgin = new System.Text.StringBuilder();
110
int i = 0;
111
while (iter.MoveNext())
112
{
113
string name = (string)iter.Current;
114
string value =System.Web.HttpUtility.UrlEncode(pmDictionary[name], System.Text.Encoding.UTF8);
115
orgin.Append(name).Append("=").Append(value);
116
if (i != pmDictionary.Keys.Count - 1) orgin.Append("&");
117
i++;
118
}
119
return orgin.ToString();
120
}
121
122
}
123
}
124
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124