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

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

from, path и прочее, это элементы url, а не тела запроса.
...
Рейтинг: 0 / 0
31.03.2020, 14:26
    #39942548
m52
m52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IdHTTP.Post ошибка HTTP/1.1 400 BAD REQUEST
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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IdHTTP.Post ошибка HTTP/1.1 400 BAD REQUEST / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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