Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2012, 23:49   #1
wowsel
Begin'нер
Пользователь
 
Аватар для wowsel
 
Регистрация: 30.04.2010
Сообщений: 48
По умолчанию POST длинной строки (работа с api)

Приветствую. Суть вопроса такова:
Имеется API http://poniez.net/api-docs
Имеется программа, которая переводит картинку в байтовую последовательность а её в base64, но при попытке отправить POST на api типа poniez.net/api?upload=текст говорит что запрос очень большой. Подскажите что можно сделать в данном случае? Вот код программы.
Код:
var
  f: file;
  buf:string;
  //buf:TStringList;
  myBuf: pointer;
  fs: integer;
HTTP: THTTPSend;
begin
//buf:=TStringList.Create;
//http:=THTTPSend.Create;
  assignfile(f, edit1.Text);
  reset(f, 1);
  fs := fileSize(f);
  GetMem(myBuf, fs);
  blockRead(f, myBuf^, fs);
  //
  Memo1.Lines.Add( bin2base64(myBuf, fs) ); // send base64 encoded data via HTTP POST
 //  http.httpmethod('POST','http://poniez.net/api?upload='+bin2base64(myBuf, fs)+'&format=xml');
 //  memo2.Lines.LoadFromStream(http.Document);
  //
  ShowMessage('1');
  buf:=(AnsitoUtf8(bin2base64(mybuf, fs)));
 memo2.Lines.Add(IdHTTP1.Post('http://poniez.net/api?upload=',buf));
 ShowMessage('2');
  FreeMem(myBuf);
  closeFile(f);
end;
Код:
function bin2base64(myBinaryData: pointer; myBinaryDataSize: integer): string;
var
  data: AnsiString;
begin
  if ((nil <> myBinaryData) and (0 < myBinaryDataSize)) then begin
    //
    SetLength(data, myBinaryDataSize);
    move(myBinaryData^, data[1], myBinaryDataSize);
    //
    result := encodebase64(data);
  //  ShowMessage(Result);
    end
  else
    result := '';
end;
wowsel вне форума Ответить с цитированием
Старый 17.05.2012, 11:11   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> api?upload='+bin2base64(myBuf, fs)

т.е. весь файл вы засовываете в URL? Это, мякго скажем, неверный подход. Данные должны передаваться в теле запроса POST, а не в адресе.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 17.05.2012, 11:24   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  f: file;
  buf: string;
  postdata: TStringList;
  myBuf: pointer;
  fs: integer;
begin
  assignfile(f, '1.png');
  reset(f, 1);
  fs := fileSize(f);
  GetMem(myBuf, fs);
  blockRead(f, myBuf^, fs);
  buf := bin2base64(mybuf, fs);
  postdata := TStringList.Create;
  postdata.Add('upload=' + buf);
  memo1.text := IdHTTP1.Post('http://poniez.net/api', postdata);
  memo1.lines.savetofile('2.html');
  FreeMem(myBuf);
  postdata.Free;
  closeFile(f);
end;
Вот так картинка передается, но лично у меня возникает варнинг:
Цитата:
Warning: imagecreatefrompng() [function.imagecreatefrompng]: gd-png: fatal libpng error: Q[10]U[1E]: invalid chunk type in /var/www/ferdinand/data/www/poniez.net/includes/classes/dmx.class.upload.php on line 322

Warning: imagecreatefrompng() [function.imagecreatefrompng]: gd-png error: setjmp returns error condition in /var/www/ferdinand/data/www/poniez.net/includes/classes/dmx.class.upload.php on line 322

Warning: imagecreatefrompng() [function.imagecreatefrompng]: '/var/www/ferdinand/data/www/poniez.net/images/temp_ZSRdG9HUbh7pc1xM32zK68CDvitueT gqkXmwfFYosAaVLlP0rWOE5NnB4yIjQ.png ' is not a valid PNG file in /var/www/ferdinand/data/www/poniez.net/includes/classes/dmx.class.upload.php on line 322
{"status_code":403,"status_txt":"in valid source"}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VK API. POST-запрос в Delphi Homadrom Общие вопросы Delphi 6 03.05.2012 21:29
Разбивка длинной строки на подстроки. zabej C# (си шарп) 0 16.02.2012 16:02
Работа с WebMoney API W0LF Общие вопросы Delphi 3 03.11.2010 22:35
Порядковый номер самой длинной строки в файле tshen Помощь студентам 5 10.06.2010 14:44
post запрос, результат разбить на строки Kukkk Общие вопросы Delphi 2 20.08.2009 17:01