===================================================
Загрузка фотографий на сервер ВКонтакте от имени пользователя осуществляется приложением в 3 этапа:
1. С помощью метода photos.getUploadServer приложение узнает http-адрес для загрузки фотографий. При вызове этого метода можно указать параметр save_big равным 1, тогда помимо стандартных размеров фотографии будут сохраняться в более высоком качестве.
2. Приложение формирует POST-запрос на полученный адрес.
Запрос должен содержать поля file1-file5, которые содержат файлы с изображениями (JPG, PNG, BMP или GIF).
В ответ приложение получает следующие данные в формате JSON:
{"server": '1', "photos_list": '2,3,4', "aid": '5', "hash": '12345abcde'}
3. С помощью метода photos.save приложение передает серверу полученные данные (server, photos_list, aid и hash) и получает данные о загруженных изображениях.
Фотографии загружены.
=============================================
Первый и третий этапы можно сказать я реализовал, а вот со вторым проблема. Никак не могу норм пост запрос составить для отправки файлов, чтобы мне в ответ возвращалось поле photo_list не пустым, как это происходит сейчас.
Пишу на шарпе. Код запроса ниже смотрите:
Код: Выделить всё
string SendPOST(string URL, string[] fileNames) { try { string boundary = Guid.NewGuid().ToString().Replace("-", ""); string header = "--" + boundary; string headerCloser = header + "--"; hwr = (HttpWebRequest)WebRequest.Create(URL); hwr.Method = "POST"; hwr.PreAuthenticate = true; hwr.AllowWriteStreamBuffering = true; hwr.AutomaticDecompression = DecompressionMethods.GZip; hwr.ProtocolVersion = HttpVersion.Version10; hwr.UserAgent = "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.6.30 Version/10.62"; hwr.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, */*;q=0.1"; hwr.Headers.Add("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8"); hwr.Headers.Add("Accept-Charset", "iso-8859-1, utf-8, utf-16, *;q=0.1"); hwr.Headers.Add("Accept-Encoding", "deflate, gzip, x-gzip, identity, *;q=0"); hwr.Headers.Add("Cache-Control", "no-cache"); hwr.ContentType = "multipart/form-data; boundary=" + boundary; hwr.KeepAlive = false; if (fileNames.Length > 5) throw new vKontakteException("Превышено число загружаемых картинок"); Stream s = hwr.GetRequestStream(); StreamWriter sw = new StreamWriter(s); for (int i = 0; i < fileNames.Length; i++) { sw.WriteLine(header); sw.WriteLine("Content-Disposition: form-data; name=\"file" + (i + 1).ToString() + "\""); sw.WriteLine("Content-Type: application/octet-stream"); sw.WriteLine(); string fileCont = Encoding.GetEncoding(1251).GetString(File.ReadAllBytes(fileNames[0])); sw.WriteLine(fileCont); sw.WriteLine(); } sw.Write(headerCloser); sw.Close(); wr = (HttpWebResponse)hwr.GetResponse(); StreamReader sr = new StreamReader(wr.GetResponseStream(), Encoding.UTF8); string response = sr.ReadToEnd(); wr.Close(); return response; } catch (WebException webExc) { throw new vKontakteException(webExc.Message); } }