Здравствуйте, коллеги!
Пытаюсь сформировать
POST запрос по указанному адресу:
https:// int223.zakupki.gov.ru/223/integration/integration/upload
Но каждый раз когда пытаюсь получить ответ, сервер возвращает 404.
В регламенте описан пример:
Пример POST-запроса (в скобках указаны переменные значения):
POST /223/integration/integration/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------------7db10b11c0824
Host: int223.zakupki.gov.ru
Content-Length: (размер содержимого)
Connection: Keep-Alive
Cache-Control: no-cache
-----------------------------7db10b11c0824
Content-Disposition: form-data; name="login"
(имя пользователя)
-----------------------------7db10b11c0824
Content-Disposition: form-data; name="password"
(пароль)
-----------------------------7db10b11c0824
Content-Disposition: form-data; name="document"; filename="(имя файла)"
Content-Type: text/xml
(XML-документ)
-----------------------------7db10b11c0824
Вот исходник:
X509Store certStore = new X509Store(StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly);
var cert = certStore.Certificates.Find(X509FindType.FindBySubjectName, "MyCompanySSL", false)[0];
byte[] fileData = File.ReadAllBytes(@"D:\test.xml");
const string url = "https://int223.zakupki.gov.ru/223/integration/integration/upload";
string boundary = $"-----------------------------{DateTime.Now.Ticks.ToString("x")}";
byte[] data;
using (Stream formDataStream = new MemoryStream())
{
string login = $"{boundary}\r\nContent-Disposition: form-data; name=\"login\"\r\n\r\n{"MyLogin"}";
formDataStream.Write(Encoding.ASCII.GetBytes(login), 0, Encoding.ASCII.GetBytes(login).Length);
string password = $"{boundary}\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\n{"MyPassword"}";
formDataStream.Write(Encoding.ASCII.GetBytes(password), 0, Encoding.ASCII.GetBytes(password).Length);
string fileHeader = $"{boundary}\r\nContent-Disposition: form-data; name=\"{"document"}\"; filename=\"{"test.xml"}\"\r\nContent-Type: text/xml\r\n\r\n";
formDataStream.Write(Encoding.ASCII.GetBytes(fileHeader), 0, Encoding.ASCII.GetBytes(fileHeader).Length);
formDataStream.Write(fileData, 0, fileData.Length);
string fileFooter = "\r\n" + boundary + "\r\n";
formDataStream.Write(Encoding.ASCII.GetBytes(fileFooter), 0, Encoding.ASCII.GetByteCount(fileFooter));
formDataStream.Position = 0;
data = new byte[formDataStream.Length];
formDataStream.Read(data, 0, data.Length);
}
WebRequest request = WebRequest.Create(url);
((HttpWebRequest)request).ClientCertificates.Add(cert);
((HttpWebRequest)request).CachePolicy= new System.Net.Cache.HttpRequestCachePolicy(System.Net.Cache.HttpRequestCacheLevel.NoCacheNoStore);
request.Method = "POST";
request.ContentType = $"multipart/form-data; boundary={boundary}";
request.ContentLength = data.Length;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(data, 0, data.Length);
requestStream.Close();
}
var response = request.GetResponse() as HttpWebResponse;
На GetResponse() постоянно вываливается 404. Не могу понять что не так?