annotate Source/Net/HttpReader.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 /*
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 * File: HttpReader.cs
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 * Created: 01/17/2003
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 * Author: Igor Tkachev
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 * mailto:it@rsdn.ru
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 */
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using System.Collections;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using System.IO;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using System.Net;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 using System.Text;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 using System.Security.Cryptography.X509Certificates;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 namespace BLToolkit.Net
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 public delegate void ProcessStream(Stream stream);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 /// Encapsulates WebReader functions.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public class HttpReader
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 #region Costructors
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public HttpReader()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 BaseUri = string.Empty;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 public HttpReader(string baseUri)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 BaseUri = baseUri;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 #region Public Properties
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 private X509Certificate _certificate;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 public X509Certificate Certificate
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 get { return _certificate; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 set { _certificate = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 private string _baseUri;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 public string BaseUri
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 get { return _baseUri; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 set { _baseUri = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 private string _previousUri;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 public string PreviousUri
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 get { return _previousUri; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 set { _previousUri = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 private CookieContainer _cookieContainer = new CookieContainer();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 public CookieContainer CookieContainer
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 get { return _cookieContainer; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 set { _cookieContainer = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 private string _userAgent = @"HttpReader";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 public string UserAgent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 get { return _userAgent; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 set { _userAgent = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 private string _accept =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 @"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 public string Accept
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 get { return _accept; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 set { _accept = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 private Uri _requestUri;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 public Uri RequestUri
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 get { return _requestUri; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 set { _requestUri = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 private string _contentType = string.Empty;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 public string ContentType
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 get { return _contentType; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 set { _contentType = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 private IWebProxy _proxy = new WebProxy();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 public IWebProxy Proxy
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 get { return _proxy; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 set { _proxy = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 private ICredentials _credentials = CredentialCache.DefaultCredentials;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 public ICredentials Credentials
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 get { return _credentials; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 set { _credentials = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 private string _html;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 public string Html
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 get { return _html; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 private readonly Hashtable _headers = new Hashtable();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 public Hashtable Headers
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 get { return _headers; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 private string _location;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 public string Location
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 get { return _location; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 private bool _sendReferer = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 public bool SendReferer
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 get { return _sendReferer; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 set { _sendReferer = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 private HttpStatusCode _statusCode;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 public HttpStatusCode StatusCode
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 get { return _statusCode; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 private int _timeout;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 public int Timeout
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 get { return _timeout; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 set { _timeout = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 #region Public Methods
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 public void LoadCertificate(string fileName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 Certificate = X509Certificate.CreateFromCertFile(fileName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 #region Request Methods
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 private HttpWebRequest PrepareRequest(string method, string requestUri, ProcessStream requestStreamProcessor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 _html = "";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 string uri = BaseUri;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 if (method != "SOAP")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 uri += requestUri;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 if (Proxy != null) request.Proxy = Proxy;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 if (Credentials != null) request.Credentials = Credentials;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 request.CookieContainer = CookieContainer;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 request.UserAgent = UserAgent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 request.Accept = Accept;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 request.Method = method == "SOAP"? "POST" : method;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 request.KeepAlive = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 if (SendReferer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 request.Referer = PreviousUri ?? uri;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 foreach (string key in Headers.Keys)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 request.Headers.Add(key, Headers[key].ToString());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 if (method == "POST")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 request.ContentType = "application/x-www-form-urlencoded";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 request.AllowAutoRedirect = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 else if (method == "SOAP")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 request.ContentType = "text/xml; charset=utf-8";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 request.AllowAutoRedirect = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 request.Headers.Add("SOAPAction", requestUri);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 request.ContentType = ContentType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 request.AllowAutoRedirect = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 PreviousUri = uri;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 RequestUri = request.RequestUri;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 if (Certificate != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 request.ClientCertificates.Add(Certificate);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 if (Timeout != 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 request.Timeout = Timeout;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 if (requestStreamProcessor != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 using (Stream st = request.GetRequestStream())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 requestStreamProcessor(st);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 return request;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 public HttpStatusCode Request(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 string requestUri,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 string method,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 ProcessStream requestStreamProcessor,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 ProcessStream responseStreamProcessor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 HttpWebRequest request = PrepareRequest(method, requestUri, requestStreamProcessor);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 using (Stream sm = resp.GetResponseStream())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 _statusCode = resp.StatusCode;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 _location = resp.Headers["Location"];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 if (resp.ResponseUri.AbsoluteUri.StartsWith(BaseUri) == false)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 BaseUri = resp.ResponseUri.Scheme + "://" + resp.ResponseUri.Host;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 CookieCollection cc = request.CookieContainer.GetCookies(request.RequestUri);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 // This code fixes the situation when a server sets a cookie without the 'path'.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 // IE takes this as the root ('/') value,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 // the HttpWebRequest class as the RequestUri.AbsolutePath value.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 foreach (Cookie c in cc)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 if (c.Path == request.RequestUri.AbsolutePath)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 CookieContainer.Add(new Cookie(c.Name, c.Value, "/", c.Domain));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 if (responseStreamProcessor != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 responseStreamProcessor(sm);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 return StatusCode;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 public IEnumerable<string> Request(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 string requestUri,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 string method,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 ProcessStream requestStreamProcessor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 HttpWebRequest request = PrepareRequest(method, requestUri, requestStreamProcessor);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 using (Stream sm = resp.GetResponseStream())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 using (StreamReader sr = new StreamReader(sm, Encoding.Default))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 _statusCode = resp.StatusCode;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 _location = resp.Headers["Location"];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 if (resp.ResponseUri.AbsoluteUri.StartsWith(BaseUri) == false)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 BaseUri = resp.ResponseUri.Scheme + "://" + resp.ResponseUri.Host;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 CookieCollection cc = request.CookieContainer.GetCookies(request.RequestUri);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 // This code fixes the case when a server sets a cookie without the 'path'.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 // IE takes this as the root ('/') value,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 // the HttpWebRequest class as the RequestUri.AbsolutePath value.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 foreach (Cookie c in cc)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 if (c.Path == request.RequestUri.AbsolutePath)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 CookieContainer.Add(new Cookie(c.Name, c.Value, "/", c.Domain));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 while (true)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 string str = sr.ReadLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 if (str == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 yield return str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 class DefaultRequestStreamProcessor
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 public DefaultRequestStreamProcessor(string data)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 _data = data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 readonly string _data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 public void Process(Stream stream)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 byte[] bytes = Encoding.ASCII.GetBytes(_data);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 stream.Write(bytes, 0, bytes.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 class DefaultResponseStreamProcessor
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 public DefaultResponseStreamProcessor(HttpReader reader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 _reader = reader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 readonly HttpReader _reader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 public void Process(Stream stream)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 using (StreamReader sr = new StreamReader(stream, Encoding.Default))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 _reader._html = sr.ReadToEnd();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 public HttpStatusCode Get(string requestUri)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 DefaultResponseStreamProcessor rp = new DefaultResponseStreamProcessor(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 return Request(requestUri, "GET", null, rp.Process);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 public HttpStatusCode Get(string requestUri, ProcessStream responseStreamProcessor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 return Request(requestUri, "GET", null, responseStreamProcessor);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 public HttpStatusCode Post(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 string requestUri,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 string postData)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 return Post(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 requestUri,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 new DefaultRequestStreamProcessor(postData).Process,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 new DefaultResponseStreamProcessor(this).Process);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 public HttpStatusCode Post(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 string requestUri,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 ProcessStream requestStreamProcessor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 return Post(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 requestUri,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 requestStreamProcessor,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 new DefaultResponseStreamProcessor(this).Process);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 public HttpStatusCode Post(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 string requestUri,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 string postData,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 ProcessStream responseStreamProcessor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 return Post(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 requestUri,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 new ProcessStream(new DefaultRequestStreamProcessor(postData).Process),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 responseStreamProcessor);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 public HttpStatusCode Post(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 string requestUri,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 ProcessStream requestStreamProcessor,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 ProcessStream responseStreamProcessor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 Request(requestUri, "POST", requestStreamProcessor, responseStreamProcessor);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 for (int i = 0; i < 10; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 bool post = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 switch (StatusCode)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 case HttpStatusCode.MultipleChoices: // 300
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 case HttpStatusCode.MovedPermanently: // 301
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 case HttpStatusCode.Found: // 302
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 case HttpStatusCode.SeeOther: // 303
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 case HttpStatusCode.TemporaryRedirect: // 307
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 post = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 default:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 return StatusCode;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 if (Location == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 Uri uri = new Uri(new Uri(PreviousUri), Location);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 BaseUri = uri.Scheme + "://" + uri.Host;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 requestUri = uri.AbsolutePath + uri.Query;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 Request(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 requestUri,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 post? "POST": "GET",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 post? requestStreamProcessor: null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 responseStreamProcessor);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 return StatusCode;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 private HttpStatusCode Soap(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 string soapAction,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 ProcessStream inputStreamProcessor,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 ProcessStream outputStreamProcessor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 return Request("\"" + soapAction + "\"", "SOAP", inputStreamProcessor, outputStreamProcessor);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 public HttpStatusCode Soap(string soapAction, string postData)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 return Soap(soapAction,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 new DefaultRequestStreamProcessor(postData).Process,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 new DefaultResponseStreamProcessor(this).Process);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 public HttpStatusCode Soap(string soapAction, string postData, ProcessStream outputStreamProcessor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 return Soap(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 soapAction,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 new DefaultRequestStreamProcessor(postData).Process,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 outputStreamProcessor);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 public IEnumerable<string> SoapEx(string soapAction, string postData)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 return Request("\"" + soapAction + "\"", "SOAP", new DefaultRequestStreamProcessor(postData).Process);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446 #region Download
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 public void Download(string requestUri, string fileName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 string uri = BaseUri + requestUri;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 WebClient request = new WebClient();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 if (Proxy != null) request.Proxy = Proxy;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 if (Credentials != null) request.Credentials = Credentials;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 foreach (string key in Headers.Keys)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 request.Headers.Add(key, Headers[key].ToString());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 request.DownloadFile(uri, fileName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 }