1
using System;
2
using MSXML2;
3
using System.Web;
4
namespace JJBase.NET.HTTP
5
{
6
/// <summary>
7
/// JJBase 的摘要说明。
8
/// </summary>
9
/// RFC2616 - Hypertext Transfer Protocol -- HTTP/1.1
10
/// 协议参考:http://www.cnpaf.net/Class/Rfcen/053291853591170.html
11
/// author:梁俊杰
12
/// date:2005-8-23
13
/// 功能:实现http数据包的发送和接收
14
public class msXML
15
{
16
17
public struct NetData
18
{
19
public RequestHeader RequestHead;
20
public ResponseHeader ResponseHead;
21
}
22
public struct RequestHeader
23
{
24
public string Method;
25
public string Url;
26
public string User;
27
public string Password;
28
public string Accept;
29
public string AcceptCharset;
30
public string AcceptEncoding;
31
public string AcceptLanguage;
32
public string ContentType;
33
public string Authorization;
34
public string CacheControl;
35
public string Expect;
36
public string From;
37
public string Host;
38
public string IfMatch;
39
public string IfModifiedSince;
40
public string IfNoneMatch;
41
public string IfRange;
42
public string IfUnmodifiedSince;
43
public string MaxForwards;
44
public string ProxyAuthorization;
45
public string Range;
46
public string Referer;
47
public string TE;
48
public string UserAgent;
49
public string Pragma;
50
public string Connection;
51
public string ContentLength;
52
public string Cookie;
53
public string SendData;
54
}
55
public struct ResponseHeader
56
{
57
public string StatusCode;
58
public string Allow;
59
public DateTime Date;
60
public string ContentEncoding;
61
public string ContentLanguage;
62
public string ContentLength;
63
public string ContentLocation;
64
public string ContentMD5;
65
public string ContentRange;
66
public string ContentType;
67
public string LastModified;
68
public string Expires;
69
public string AcceptRanges;
70
public string Age;
71
public string ETag;
72
public string Location;
73
public string ProxyAuthenticate;
74
public string RetryAfter;
75
public string Server;
76
public string Vary;
77
public string WWWAuthenticate;
78
public string Pragma;
79
public string Connection;
80
public string SetCookie;
81
public string GetData;
82
public string AllHeaders;
83
}
84
85
public msXML()
86
{
87
//
88
// TODO: 在此处添加构造函数逻辑
89
//
90
}
91
public string GetHtmlData(ref NetData nd)
92
{
93
string result="";
94
string User="";
95
string Password="";
96
string Method="";
97
string g_AllResponseHeaders="";
98
//处理提交数据前的数据头
99
if (nd.RequestHead.User!=""&&nd.RequestHead.User!=null) User=nd.RequestHead.User;
100
if (nd.RequestHead.Password!=""&&nd.RequestHead.Password!=null) Password=nd.RequestHead.Password;
101
if (nd.RequestHead.Method.ToString()==""&&nd.RequestHead.Method==null) {return "";}
102
else{
103
Method=nd.RequestHead.Method.ToString().ToUpper();
104
}
105
MSXML2.ServerXMLHTTP SXmlHttp = new MSXML2.ServerXMLHTTP();
106
if (User==""){SXmlHttp.open(Method,nd.RequestHead.Url,false,"","");}
107
else{
108
SXmlHttp.open(Method,nd.RequestHead.Url,false,User,Password);}
109
if (nd.RequestHead.Accept!=""&&nd.RequestHead.Accept!=null) SXmlHttp.setRequestHeader("Accept",nd.RequestHead.Accept);
110
if (nd.RequestHead.AcceptCharset!=""&&nd.RequestHead.AcceptCharset!=null) SXmlHttp.setRequestHeader("Accept-Charset",nd.RequestHead.AcceptCharset);
111
if (nd.RequestHead.AcceptEncoding!=""&&nd.RequestHead.AcceptEncoding!=null) SXmlHttp.setRequestHeader("Accept-Encoding",nd.RequestHead.AcceptEncoding);
112
if (nd.RequestHead.AcceptLanguage!=""&&nd.RequestHead.AcceptLanguage!=null) SXmlHttp.setRequestHeader("Accept-Language",nd.RequestHead.AcceptLanguage);
113
if (nd.RequestHead.ContentType!=""&&nd.RequestHead.ContentType!=null) SXmlHttp.setRequestHeader("Content-Type",nd.RequestHead.ContentType);
114
if (nd.RequestHead.Authorization!=""&&nd.RequestHead.Authorization!=null) SXmlHttp.setRequestHeader("Authorization",nd.RequestHead.Authorization);
115
if (nd.RequestHead.CacheControl!=""&&nd.RequestHead.CacheControl!=null) SXmlHttp.setRequestHeader("Cache-Control",nd.RequestHead.CacheControl);
116
if (nd.RequestHead.Expect!=""&&nd.RequestHead.Expect!=null) SXmlHttp.setRequestHeader("Expect",nd.RequestHead.Expect);
117
if (nd.RequestHead.From!=""&&nd.RequestHead.From!=null) SXmlHttp.setRequestHeader("From",nd.RequestHead.From);
118
if (nd.RequestHead.Host!=""&&nd.RequestHead.Host!=null) SXmlHttp.setRequestHeader("Host",nd.RequestHead.Host);
119
if (nd.RequestHead.IfMatch!=""&&nd.RequestHead.IfMatch!=null) SXmlHttp.setRequestHeader("If-Match",nd.RequestHead.IfMatch);
120
if (nd.RequestHead.IfModifiedSince!=""&&nd.RequestHead.IfModifiedSince!=null) SXmlHttp.setRequestHeader("If-Modified-Since",nd.RequestHead.IfModifiedSince);
121
if (nd.RequestHead.IfNoneMatch!=""&&nd.RequestHead.IfNoneMatch!=null) SXmlHttp.setRequestHeader("If-None-Match",nd.RequestHead.IfNoneMatch);
122
if (nd.RequestHead.IfRange!=""&&nd.RequestHead.IfRange!=null) SXmlHttp.setRequestHeader("If-Range",nd.RequestHead.IfRange);
123
if (nd.RequestHead.IfUnmodifiedSince!=""&&nd.RequestHead.IfUnmodifiedSince!=null) SXmlHttp.setRequestHeader("If-Unmodified-Since",nd.RequestHead.IfUnmodifiedSince);
124
if (nd.RequestHead.MaxForwards!=""&&nd.RequestHead.MaxForwards!=null) SXmlHttp.setRequestHeader("Max-Forwards",nd.RequestHead.MaxForwards);
125
if (nd.RequestHead.ProxyAuthorization!=""&&nd.RequestHead.ProxyAuthorization!=null) SXmlHttp.setRequestHeader("Proxy-Authorization",nd.RequestHead.ProxyAuthorization);
126
if (nd.RequestHead.Range!=""&&nd.RequestHead.Range!=null) SXmlHttp.setRequestHeader("Range",nd.RequestHead.Range);
127
if (nd.RequestHead.Referer!=""&&nd.RequestHead.Referer!=null) SXmlHttp.setRequestHeader("Referer",nd.RequestHead.Referer);
128
if (nd.RequestHead.TE!=""&&nd.RequestHead.TE!=null) SXmlHttp.setRequestHeader("TE",nd.RequestHead.TE);
129
if (nd.RequestHead.UserAgent!=""&&nd.RequestHead.UserAgent!=null) SXmlHttp.setRequestHeader("User-Agent",nd.RequestHead.UserAgent);
130
if (nd.RequestHead.Pragma!=""&&nd.RequestHead.Pragma!=null) SXmlHttp.setRequestHeader("Pragma",nd.RequestHead.Pragma);
131
if (nd.RequestHead.Connection!=""&&nd.RequestHead.Connection!=null) SXmlHttp.setRequestHeader("Connection",nd.RequestHead.Connection);
132
if (nd.RequestHead.ContentLength!=""&&nd.RequestHead.ContentLength!=null) SXmlHttp.setRequestHeader("Content-Length",nd.RequestHead.ContentLength);
133
if (nd.RequestHead.Cookie!=""&&nd.RequestHead.Cookie!=null) SXmlHttp.setRequestHeader("Cookie",nd.RequestHead.Cookie);
134
135
switch(Method)
136
{
137
case "GET":
138
{
139
try
140
{
141
SXmlHttp.send("");
142
}
143
catch(Exception ex)
144
{
145
return ex.Message.ToString();
146
}
147
finally{}
148
break;
149
}
150
case "POST":
151
{
152
try
153
{
154
SXmlHttp.setRequestHeader("Content-Length",nd.RequestHead.SendData.Length.ToString ());
155
SXmlHttp.send(nd.RequestHead.SendData);
156
}
157
catch(Exception ex)
158
{
159
return ex.Message.ToString();
160
}
161
finally{}
162
break;
163
}
164
165
}
166
nd.ResponseHead.StatusCode=SXmlHttp.status.ToString();
167
g_AllResponseHeaders = SXmlHttp.getAllResponseHeaders();
168
nd.ResponseHead.AllHeaders=g_AllResponseHeaders;
169
//处理返回的数据头
170
if (g_AllResponseHeaders.IndexOf("Allow")>0) nd.ResponseHead.Allow=SXmlHttp.getResponseHeader("Allow");
171
if (g_AllResponseHeaders.IndexOf("Date")>0) nd.ResponseHead.Date=Convert.ToDateTime(SXmlHttp.getResponseHeader("Date"));
172
if (g_AllResponseHeaders.IndexOf("Content-Encoding")>0) nd.ResponseHead.ContentEncoding=SXmlHttp.getResponseHeader("Content-Encoding");
173
if (g_AllResponseHeaders.IndexOf("Content-Language")>0) nd.ResponseHead.ContentLanguage=SXmlHttp.getResponseHeader("Content-Language");
174
if (g_AllResponseHeaders.IndexOf("Content-Length")>0) nd.ResponseHead.ContentLength=SXmlHttp.getResponseHeader("Content-Length");
175
if (g_AllResponseHeaders.IndexOf("Content-Location")>0) nd.ResponseHead.ContentLocation=SXmlHttp.getResponseHeader("Content-Location");
176
if (g_AllResponseHeaders.IndexOf("Content-MD5")>0) nd.ResponseHead.ContentMD5=SXmlHttp.getResponseHeader("Content-MD5");
177
if (g_AllResponseHeaders.IndexOf("Content-Range")>0) nd.ResponseHead.ContentRange=SXmlHttp.getResponseHeader("Content-Range");
178
if (g_AllResponseHeaders.IndexOf("Content-Type")>0) nd.ResponseHead.ContentType=SXmlHttp.getResponseHeader("Content-Type");
179
if (g_AllResponseHeaders.IndexOf("Last-Modified")>0) nd.ResponseHead.LastModified=SXmlHttp.getResponseHeader("Last-Modified");
180
if (g_AllResponseHeaders.IndexOf("Expires")>0) nd.ResponseHead.Expires=SXmlHttp.getResponseHeader("Expires");
181
if (g_AllResponseHeaders.IndexOf("Accept-Ranges")>0) nd.ResponseHead.AcceptRanges=SXmlHttp.getResponseHeader("Accept-Ranges");
182
if (g_AllResponseHeaders.IndexOf("Age")>0) nd.ResponseHead.Age=SXmlHttp.getResponseHeader("Age");
183
if (g_AllResponseHeaders.IndexOf("ETag")>0) nd.ResponseHead.ETag=SXmlHttp.getResponseHeader("ETag");
184
if (g_AllResponseHeaders.IndexOf("Location")>0) nd.ResponseHead.Location=SXmlHttp.getResponseHeader("Location");
185
if (g_AllResponseHeaders.IndexOf("Proxy-Authenticate")>0) nd.ResponseHead.ProxyAuthenticate=SXmlHttp.getResponseHeader("Proxy-Authenticate");
186
if (g_AllResponseHeaders.IndexOf("Retry-After")>0) nd.ResponseHead.RetryAfter=SXmlHttp.getResponseHeader("Retry-After");
187
if (g_AllResponseHeaders.IndexOf("Server")>0) nd.ResponseHead.Server=SXmlHttp.getResponseHeader("Server");
188
if (g_AllResponseHeaders.IndexOf("Vary")>0) nd.ResponseHead.Vary=SXmlHttp.getResponseHeader("Vary");
189
if (g_AllResponseHeaders.IndexOf("WWW-Authenticate")>0) nd.ResponseHead.WWWAuthenticate=SXmlHttp.getResponseHeader("WWW-Authenticate");
190
if (g_AllResponseHeaders.IndexOf("Pragma")>0) nd.ResponseHead.RetryAfter=SXmlHttp.getResponseHeader("Retry-After");
191
if (g_AllResponseHeaders.IndexOf("Connection")>0) nd.ResponseHead.Connection=SXmlHttp.getResponseHeader("Connection");
192
if (g_AllResponseHeaders.IndexOf("Set-Cookie")>0) nd.ResponseHead.SetCookie=SXmlHttp.getResponseHeader("Set-Cookie");
193
if (g_AllResponseHeaders.IndexOf("Retry-After")>0) nd.ResponseHead.RetryAfter=SXmlHttp.getResponseHeader("Retry-After");
194
if (g_AllResponseHeaders.IndexOf("Retry-After")>0) nd.ResponseHead.RetryAfter=SXmlHttp.getResponseHeader("Retry-After");
195
//取得字符集,不进行此项操作可能出现乱码
196
string charset="gb2312";
197
if (nd.ResponseHead.ContentType.ToString().IndexOf("utf-8")>0){charset="utf-8";}
198
result=BYTE2STR((byte[])SXmlHttp.responseBody,charset);
199
nd.ResponseHead.GetData=result;
200
SXmlHttp=null;
201
return result;
202
}
203
private string BYTE2STR(byte[] vIn,string charset)
204
{
205
// int ThisCharCode,NextCharCode,HZCode;
206
// string strReturn="";
207
// for (int i = 1; i <= vIn.Length ; i++)
208
// {
209
// ThisCharCode =Convert.ToInt32(vIn[i]);
210
// if (ThisCharCode < 128)
211
// {
212
// strReturn = strReturn +Convert.ToChar(ThisCharCode);
213
// }
214
// else
215
// {
216
// NextCharCode =vIn[i+1];
217
// HZCode=ThisCharCode * 256 +NextCharCode;
218
// strReturn = strReturn + Convert.ToChar(HZCode);
219
// i = i + 1;
220
// }
221
// }
222
// return strReturn;
223
try
224
{
225
return System.Text.Encoding.GetEncoding(charset).GetString(vIn).ToString();
226
}
227
catch(Exception ex){return ex.Message;}
228
}
229
230
}
231
}

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

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231
