powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IdHTTP.Post ошибка HTTP/1.1 400 BAD REQUEST
4 сообщений из 4, страница 1 из 1
IdHTTP.Post ошибка HTTP/1.1 400 BAD REQUEST
    #39942538
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

Использую IdHTTP в Delphi XE8
Моя задача - переименовать файл на Яндекс.Диске

Как переименовать - описано здесь: https://yandex.ru/dev/disk/api/reference/move-docpage/

Я формирую и отправляю POST-запрос, как сказано в документации, но в ответ получаю 'HTTP/1.1 400 BAD REQUEST' Код - ниже.

Что я не так делаю?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
function TYDClient.Rename(PathOld,PathNew: string; var ResponseCode: integer): string;
var ErrorText, URL, response: string;
    SL: TStringList;
begin
  result:='';
  URL:='https://cloud-api.yandex.net:443/v1/disk/resources/move';

  SL:=TStringList.Create;
  SL.Add('from='+TNetEncoding.URL.Encode('disk:'+PathOld));
  SL.Add('path='+TNetEncoding.URL.Encode('disk:'+PathNew));
  SL.Add('overwrite=true');

  IdHTTP.Request.CustomHeaders.Clear;
  IdHTTP.Request.CustomHeaders.AddValue('Authorization','OAuth '+access_token);
  IdHTTP.Request.CustomHeaders.AddValue('Accept','*/*');
  IdHTTP.Response.Clear;

  response := '';
  try
    response := IdHTTP.Post(URL, SL);
  except on E:Exception do
    ErrorText:=E.Message;
  end;
  SL.free;

  if IdHTTP.ResponseCode<>201 then result:=IdHTTP.ResponseText;
  ResponseCode:=IdHTTP.ResponseCode;
end;


Все остальные манипуляции с файлами на Я.Диске и выполняю запросами GET, PUT, DELETE и все прекрасно работает, но на этот раз мне надо применить запрос POST и не получилось.

Какие будут идеи?
...
Рейтинг: 0 / 0
IdHTTP.Post ошибка HTTP/1.1 400 BAD REQUEST
    #39942542
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем гадать долго и нудно, если можно через любой http proxy типа Fiddler'а просто сравнить правильный пакет и неправильный?
...
Рейтинг: 0 / 0
IdHTTP.Post ошибка HTTP/1.1 400 BAD REQUEST
    #39942544
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52
Какие будут идеи?

from, path и прочее, это элементы url, а не тела запроса.
...
Рейтинг: 0 / 0
IdHTTP.Post ошибка HTTP/1.1 400 BAD REQUEST
    #39942548
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

СПАСИБО ОГРОМНОЕ! Вы мне очень помогли!
Я думал, что при отправке POST надо параметры передавать не в строке URL, вот я и передавал из в TStringList по-строчно и был не прав. Переделал так (см.ниже), теперь я тело TStringList передаю пустым, а в URL клею все параметры.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
function TYDClient.Rename(PathOld,PathNew: string; var ResponseCode: integer): string;
var ErrorText, URL, response: string;
    SL: TStringList;
begin
  result:='';
  URL:='https://cloud-api.yandex.net:443/v1/disk/resources/move';
  URL:=URL + '?from='+TNetEncoding.URL.Encode('disk:'+PathOld);
  URL:=URL + '&path='+TNetEncoding.URL.Encode('disk:'+PathNew);
  URL:=URL + '&overwrite=true';

  IdHTTP.Request.CustomHeaders.Clear;
  IdHTTP.Request.CustomHeaders.AddValue('Authorization','OAuth '+access_token);
  IdHTTP.Request.CustomHeaders.AddValue('Accept','*/*');
  IdHTTP.Response.Clear;

  SL:=TStringList.Create;
  response := '';
  try
    response := IdHTTP.Post(URL, SL);
  except on E:Exception do
    ErrorText:=E.Message;
  end;
  SL.free;

  if IdHTTP.ResponseCode<>201 then result:=IdHTTP.ResponseText;
  ResponseCode:=IdHTTP.ResponseCode;
end;
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IdHTTP.Post ошибка HTTP/1.1 400 BAD REQUEST
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]