Имя: Пароль:
1C
1С v8
Как передать файл через POST запрос
0 SeregaMW
 
08.06.15
18:57
Пишу загрузку фоток в контакт

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
                WinHttp.Option(2,"utf-8");
                WinHttp.Open("POST","https://api.vk.com/method/photos.getWallUploadServer",0);
                WinHttp.SetRequestHeader("Accept-Language", "ru");
                WinHttp.SetRequestHeader("Accept-Charset","utf-8");
                WinHttp.setRequestHeader("Content-Language", "ru");
                WinHttp.setRequestHeader("Content-Charset", "utf-8");
                WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
                ПараметрыПОСТ = "group_id="+СтрЗаменить(строка.Ссылка.ИДГруппы, "-","")+"&v=5.0" + "&access_token="+УчетнаяЗапись.Ссылка.Токен;
                WinHttp.Send(ПараметрыПОСТ);
                ТекстОтвета = WinHttp.ResponseText();

1. С помощью метода photos.getWallUploadServer приложение узнает http-адрес для загрузки фотографии на стену текущего пользователя, другого пользователя или группы в зависимости от переданных параметров user_id или group_id.

2. Приложение формирует POST-запрос на полученный адрес.
Запрос должен включать поле photo, содержащее файл с изображением (JPG, PNG, BMP или GIF)

Пример результата загрузки фотографии:

{"server": "1234", "photo": "1234", "hash": "12345abcde"}

Первый пункт получился формирую второй запрос

    WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
                WinHttp.Option(2,"utf-8");
                WinHttp.Open("POST",СтрЗаменить(Сред(ТекстОтвета, Найти(ТекстОтвета, "http"),Найти(ТекстОтвета, "wallphoto")-Найти(ТекстОтвета, "http")+11),"\",""));
                WinHttp.SetRequestHeader("Accept-Language", "ru");
                WinHttp.SetRequestHeader("Accept-Charset","utf-8");
                WinHttp.setRequestHeader("Content-Language", "ru");
                WinHttp.setRequestHeader("Content-Charset", "utf-8");
                WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
                ПараметрыПОСТ = СтрЗаменить(Сред(ТекстОтвета, Найти(ТекстОтвета, "&"),Найти(ТекстОтвета, "wallphoto")-Найти(ТекстОтвета, "&")+11),"\","")+"&Photo="+Base64Строка(Новый ДвоичныеДанные("C:\Контакт\Выгрузкакартинок"+"\"+ИмяФайла));
            
                ПараметрыПОСТ =""; //"photo=" + СодержимоеФайла;
                WinHttp.Send(ПараметрыПОСТ);
                ТекстОтвета = WinHttp.ResponseText();

в ответ возвращает "{"server":623416,"photo":"[]","hash":"ad0aac35271ecbf012a163dad22afe35"}"

поле фото пустое, по чему то не передается или сервер не принимает файл.
1 Asmody
 
08.06.15
19:36
пользуйся нативными средствами
2 SeregaMW
 
08.06.15
19:44
(1) Это как? Можешь по подробней рассказать?
3 Asmody
 
08.06.15
19:45
(2) поподробнее в СП по слову HTTPСоединение
4 SeregaMW
 
08.06.15
20:26
Пробовал через HTTPСоединение

HTTPКанал = Новый HTTPСоединение("http://cs623416.vk.com";);
    HTTPКанал.ОтправитьДляОбработки("C:\Контакт\Выгрузкакартинок"+"\"+ИмяФайла,СтрЗаменить(Сред(ТекстОтвета, Найти(ТекстОтвета, "com")+3,Найти(ТекстОтвета, "wallphoto")-Найти(ТекстОтвета, "com")+9),"\",""),"C:\Контакт\тк.txt");    

параметры для отправитьДляОбработки
1."C:\Контакт\Выгрузкакартинок\IMG_00000000033_1.jpg"
2."/upload.php?act=do_add&mid=289680097&aid=-14&gid=94169434&hash=f3a90a3cad30c5f1a6d3a11a1f87088a&rhash=71f3a635ed150c1c8627d95b21c59b04&swfupload=1&api=1&wallphoto=1""
3."C:\Контакт\тк.txt"

Выдает ошибку

{Форма.Форма.Форма(1262)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
        HTTPКанал.ОтправитьДляОбработки("C:\Контакт\Выгрузкакартинок"+"\"+ИмяФайла,СтрЗаменить(Сред(ТекстОтвета, Найти(ТекстОтвета, "com")+3,Найти(ТекстОтвета, "wallphoto")-Найти(ТекстОтвета, "com")+9),"\",""),"C:\Контакт\тк.txt");    
по причине:
Ошибка работы с Интернет:   Couldn't resolve host name
5 Asmody
 
08.06.15
21:32
(4) плохо читал СП. смотри про конструктор HTTPСоединение
6 Serginio1
 
08.06.15
22:29
7 Сергиус
 
09.06.15
01:14
(4) попробуй в конструкторе без "http://"; адрес указывать
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс