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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2009, 13:55   #11
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

1. выставляйте сохранть версию протокола 1.1 hoKeepOrigProtocol
2. Там еще фоном хватает ajax- запросов.
3. Там используются Cookies v2 которые даже в Indy 10.5.5 автоматом не перехватываются
4. И переадресация на результат там осуществляется Javascript-ом, на сколько я понл, ибо ответ сервера на загрузку "100 continue" не дает информации для редиректа или для последующей загрузки страницы.
Выдержки из RFC:
Цитата:
If the response status code is 100 (Continue) or 101 (Switching
Protocols), the response MAY include a Date header field, at
the server's option.
Цитата:
The purpose of the 100 (Continue) status (see section 10.1.1) is to
allow a client that is sending a request message with a request body
to determine if the origin server is willing to accept the request
(based on the request headers) before the client sends the request
body. In some cases, it might either be inappropriate or highly
inefficient for the client to send the body if the server will reject
the message without looking at the body.
подробнее здесь
Для этого предложу попробовать реализовать это не через Indy, а, например, через ICS (http://www.overbyte.be/eng/products/ics.html) возможно получится.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 25.03.2009, 14:00   #12
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Собственно текст чтобы получить все- таки этот 100 continue ответ от сервера:
Код:
http1.Get('http://imgfiles.ru/');
  cookie1.AddCookie('__utmc=184098878','imgfiles.ru');
  cookie1.AddCookie('__utmz=184098878.1237974071.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)','imgfiles.ru');
  cookie1.AddCookie('__utmb=184098878','imgfiles.ru');
  cookie1.AddCookie('__utma=184098878.1502570327.1237974070.1237974070.1237974070.1','imgfiles.ru');
  pd.AddFormField('uplFile0','c:\1.jpg');
  pd.AddFormField('uplUrl0','');
  pd.AddFormField('imgCount','0');
  pd.AddFormField('uplComment','');
  pd.AddFormField('uplImgSize','640');
  pd.AddFormField('uplPrevSize','150');
  pd.AddFormField('putInfo','1');
  pd.AddFormField('checkWat','1');
  pd.AddFile('uplFile0','c:\2.jpg',GetMIMETypeFromFile('c:\2.jpg'));
  http1.Request.ContentType:=pd.RequestContentType;
  http1.Request.Referer:='http://imgfiles.ru/';
  http1.Request.CustomHeaders.Add('Expect: 100-continue');
  http1.Request.AcceptEncoding:='deflate, gzip, x-gzip, identity, *;q=0';
  http1.Request.Accept:='text/html, application/xml;q=0.9, application/xhtml+xml,'+
  'image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1';
  http1.Request.AcceptLanguage:='ru-RU,ru;q=0.9,en;q=0.8';
  http1.Request.AcceptCharSet:='iso-8859-1, utf-8, utf-16, *;q=0.1';
  http1.Request.CustomHeaders.Add('Cookie2: $Version=1');
  http1.Post('http://imgfiles.ru/',pd);
здесь слишком много костылей, так что лучше все- таки эту задачу реализховывать другми способами, или подождать немного. Remy Lebeau (один из разрабочиков Indy) обещал в ближайшие дни,кстати, сделать еще целый ряд багфиксов в механизме и логике отлова и хранения куков в Indy, но когда он все доделает не известно.

Хотя можете еще раз проверить мой код, возможно где-то я ошибся в выставлении параметров.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 25.03.2009, 14:40   #13
Joe_Tribbiani
Форумчанин
 
Аватар для Joe_Tribbiani
 
Регистрация: 14.02.2009
Сообщений: 110
По умолчанию

ладно, тогда подожду)
а в этом коде если поставить
Код:
http1.HandleRedirects:=true;
и добавить поля
Код:
pd.AddFormField('uplAlbum','System_default');
pd.AddFormField('uplSub','Загрузить');
то картинка вроде бы отправляеться (у меня счётчика трафика)
но в ответе post запроса пустая страница...
тоесть ссылку на неё не получить)
Joe_Tribbiani вне форума Ответить с цитированием
Старый 25.03.2009, 14:50   #14
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

гвоорил же, что ошибся )
все их штуки с Cookies2 и тому подобным от лукавого и на нас не повлияют.
Так работать будет:
это минимальный набор без выставления дополнительных параметров, просто загрузка картинки.
Код:
procedure TForm22.btn1Click(Sender: TObject);
var
ss:TFileStream;
pd:TIdMultiPartFormDataStream;
begin
ss:=TFileStream.Create('c:\111.html',fmCreate);
pd:=TIdMultiPartFormDataStream.Create;
try
  http1.Get('http://imgfiles.ru/');
  pd.AddFormField('uplFile0','c:\3.jpg');
  pd.AddFormField('uplSub','Загрузить');
  pd.AddFile('uplFile0','c:\3.jpg',GetMIMETypeFromFile('c:\3.jpg'));
  http1.Request.ContentType:=pd.RequestContentType;
  http1.Request.Referer:='http://imgfiles.ru/';
  http1.Post('http://imgfiles.ru/',pd);
  http1.Get('http://imgfiles.ru/page/uploadResult.html',ss);
finally
  ss.Free;
  pd.Free;
  ShellExecute(Handle, nil,pchar('c:\111.html'), nil, nil, SW_SHOW);
end;
end;
учтите только, что ссылки, которые вы получите будут рабоатть не сразу а через несколько секунд, поэтому можно дляя красоты в цикле делать head адресу загруженной картини, пока она не появится )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи

Последний раз редактировалось Квэнди; 25.03.2009 в 14:53.
Квэнди вне форума Ответить с цитированием
Старый 25.03.2009, 15:22   #15
Joe_Tribbiani
Форумчанин
 
Аватар для Joe_Tribbiani
 
Регистрация: 14.02.2009
Сообщений: 110
По умолчанию

Спасибо!!!) Всё работает
только вто нужно поставить
Код:
http1.HandleRedirects:=true;
Joe_Tribbiani вне форума Ответить с цитированием
Старый 25.03.2009, 15:31   #16
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Да, просто у меня это в design-time выставлено
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 25.03.2009, 21:31   #17
Joe_Tribbiani
Форумчанин
 
Аватар для Joe_Tribbiani
 
Регистрация: 14.02.2009
Сообщений: 110
По умолчанию

Хм.... Дааа....
Перед отправкой картинки добавил:
Код:
PostData.AddFormField('login', sedit3.Text);
PostData.AddFormField('password', sedit4.Text);
idhttp1.Post('http://imgfiles.ru/act/accountLogin.html',postdata);
Хотел чтобы катинки добавлялись в мой аккаунт
А на сайте можна смотреть список загруженых картинок...
Так вот: картинка загружаеться раз 10 подряд!)
странноо, но даже при выключеной программе картинки продолжают появляться в моём акке, Чё делать , а?
Joe_Tribbiani вне форума Ответить с цитированием
Старый 26.03.2009, 08:24   #18
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Происходит цикл перенаправлений. Есть два варианта решений:
1. поставь максимальное кол-во перенаправлений в 1-2 (надо смотреть по ситуации)
2. Обнови Indy до сегодняшне версии. Похожую ситуацию там исправили, не вакт что именно твой случай, но цикл перенаправлений был связан с некорректным перехватом куков в IdCookieManager
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 26.03.2009, 11:15   #19
Joe_Tribbiani
Форумчанин
 
Аватар для Joe_Tribbiani
 
Регистрация: 14.02.2009
Сообщений: 110
По умолчанию

Спасибо! Поставил максимальное кол-во перенаправлений в 1 и всё заработало)
Joe_Tribbiani вне форума Ответить с цитированием
Старый 17.04.2009, 19:47   #20
Joe_Tribbiani
Форумчанин
 
Аватар для Joe_Tribbiani
 
Регистрация: 14.02.2009
Сообщений: 110
По умолчанию

Хм... На этот раз Ipicture.ru
Вот мой код:

Код:
 try

    idhttp2.Request.Referer:= 'http://ipicture.ru/';
    idhttp2.Request.ContentType:= 'multipart/form-data';
    PostData.AddFormField('userfile', filename);
    PostData.AddFormField('uploadtype', '1');
    PostData.AddFormField('method', 'file');
   PostData.AddFormField('orig_resize', sedit1.Text);
    PostData.AddFile('file', filename, GetMIMETypeFromFile(filename));
    idHTTP2.Post('http://www.ipicture.ru/Upload/', PostData,stream);
    Application.ProcessMessages;
  finally
    if(Assigned(PostData)) then
      PostData.Free;

end;
Вроде указал минимально необходимый набор параметров но
в потоке stream оказываеться пустая страница...
редирект походу не работает...
Что делать? )
Joe_Tribbiani вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повороты картинок yura-cat Помощь студентам 1 30.10.2008 14:28
Загрузка текста и картинок MAKEDON Помощь студентам 8 09.08.2008 10:36
Эффекты картинок Andrey1433 PHP 1 17.03.2008 02:07
Просмотр картинок Kocapb Общие вопросы C/C++ 1 25.11.2007 16:51
Загрузка jpg картинок А. Долматов Мультимедиа в Delphi 4 08.10.2007 17:11