@KPEBETKA

Как подружить Perl LWP и заголовок Expect: 100-continue?

Поставил перед собой задачу написать плагин, который будет выгружать скриншоты на Яндекс.Диск
Упёрся в проблему с выгрузкой, а именно при попытке залить уже существующий скриншот возвращается правильный ответ с кодом 201, а при попытке залить новый скриншот возвращается ответ с кодом 500

У меня два варианта:
1. LWP некорректно работает с Expect: 100-continue
2. Я неправильно формирую запрос

my $content = do { open my $fl,'<:raw',$upload_filename; local $/; <$fl>; };
my $req = HTTP::Request->new( PUT => $url, undef, Content => $content );
$req->header( "Accept" => "*/*" );
$req->header( "Authorization" => "OAuth $token" );
$req->header( "Etag" => "$md5file" );
$req->header( "Sha256" => "$sha256file" );
$req->header( "Expect" => "100-continue" );
$req->header( "Content-Type" => "application/binary" );
$req->header( "Transfer-Encoding" => "chunked" );
my $res = $ua->request($req);
  • Вопрос задан
  • 2793 просмотра
Решения вопроса 1
@KPEBETKA Автор вопроса
Баш мне не нужен, я плагин для Shutter пишу. Соответственно нужен только перл.
Впринципе после изучения выяснилось что если есть и данные и Expect, то запрос целиком отправляется на сервер и заголовок с 100-м ответом считывается только когда данные уже отправлены. Это приводит к deadlock'у, ибо сервер ждет что считают ответ Expect от него.
Отдельно с отправкой заголовка тоже работать не будет - он сразу после 100-го ответа ждет следующий

Есть два варианта:
1. Написать с использованием HTTP:DAW
2. Сделать через сокеты, без wwwlib'а

Первый вариант простой, но не будет OAuth - авторизации
Второй вариант для меня сложен, но буду разбираться
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы