imgur, problem z wysłaniem obrazka

0

Często wysyłam coś przez imgur i chciałem w końcu zrobić sobie programik do tego, open source, ale mam problemy z wysłaniem obrazka. Firebug dziwnie analizuje stronę, same GETy pokazuje, ale w snifferze już widać metodę POST i jako UA przestawia się Flash. Czy któryś z ekspertów w tej dziedzinie mógłby rzucić okiem na stronę i napisać co powinno przykuć moją uwagę najbardziej? W ten sposób mi pomożecie.
http://imgur.com/ (upload z dysku)

0

A z czym masz problem? Przecież jest gotowa funkcja w Synapse HttpPostFile. Dodajesz tylko moduł httpsend do sekcji uses. I później poniższy kod załatwia sprawę. Więcej o korzystaniu z HTTP w pakiecie Synapse, napisałem w moim artykule: Obsługa protokołu HTTP przy użyciu pakietu Synapse - oto przykładowy kod:

uses
  httpsend;

procedure TForm1.Button1Click(Sender : TObject);
var
  SL : TStringList;
  MS : TMemoryStream;
begin
  SL := TStringList.Create;
  MS := TMemoryStream.Create;
  MS.LoadFromFile('D:\test.jpg');
  if HttpPostFile('http://imgur.com/upload', 'Filedata', 'test.jpg', MS, SL) then
  begin
    SL.SaveToFile('D:\log.txt');
  end;
  SL.Free;
  MS.Free;
end;

W rezultacie otrzymasz na przykład taką zawartość:
{"data":{"hashes":"[\"ahq2d7E"]","hash":"ahq2d7E","album":false,"edit":false,"gallery":null,"gallery_type":null,"upload_error":false},"success":true,"status":200}
Gdzie ahq2d7E to id pliku. Oto dowód: http://imgur.com/ahq2d7E - można oczywiście też spróbować zrobić to samodzielnie. Pod WireSharkiem widać metodę POST dla odnośnika /upload. Ja kombinowałem, ale tam trzeba by podstawiać SID z treści strony z uploadem, no i ogólnie trochę "pocudować". Dlatego zwracało mi pusty plik "loga". Także to już musiał byś się sam pobawić.

Zawsze kod tej funkcji można podejrzeć. A odpowiednią wartość dla parametru FieldName wziąłem włąsnie z pod WireSharka. Gdzie w podglądzie TCP Streamu, przed właściwym plikiem było takie coś:

------------GI3cH2gL6Ef1KM7cH2ae0KM7GI3GI3
Content-Disposition: form-data; name="Filedata"; filename="test.jpg"
Content-Type: application/octet-stream

I dostosowałem to z kodem tej funkcji. I na przyszłośc, pokobminuj zawsze dłuższą chwilę sam, pomyśl najpierw na spokojnie. A pisanie na jakiekolwiek forum, nawet w dziale dla nowicjuszy, traktuj jako ostateczność.

0

Kochany jesteś (bez skojarzeń), dziękuję. Teraz widzę swoje błędy, teraz śmiga jak talala pod INDY. A w czym ten jakiś Synapse jest lepszy? On ma to samo co np. idHttp, ale jakoś bardziej rozbudowany jest, czy jak? Spróbuj mnie jakoś przekonać do tego w dwóch słowach, bo używam idHTTP tylko więc mówiąc o Synapse pisz tylko o odpowiedniku idHHTP i czy ciastka można ręcznie łatwo tam dodawać by wysłać do strony? (a może automat to robi za nas?), a obsługa https (ssl) też jest i prosta w użyciu?

I tak na boku, to znam jeszcze jedną stronę do wysyłania obrazków http://obrazki.elektroda.pl/index.php co musiałbym wysyłać z POSTem do skryptu? sporo rzeczy z inputów?

0

Każdy używa co mu bardziej leży i jest łatwiej. Osobiście od dawna nie korzystam z indy. W Synapse nic nie dzieje się z automatu. Przekirowania trzeba obsłużyć samodzielnie. Ale to żaden problem. Ciasteczka czy nagłowki da się uzupełniać, tak jak pokazałem w swoim artykule. Dla mnie używanie Synapse jest prostsze i bardziej intuicyjne. żeby nasz projekt był w pełni przenośny i każdy mógl sobie skompilowac, przerzucamy pare modułów do katalogu z projektem, a reszte robimy w sposób dynamiczny. Żadnego instalowania. Tutaj Indy perfekcyjnie ogarnia chyba tylko @kAzek. Jeżeli wolisz Indy to Cię nie przekonam. Dla mnie po prostu lepsze i wygodniejsze, bardziej opanowane. Obsługa SSL jest w obu pakietach, z tego co wiem. Zresztą podałem Ci link do artykułu, to trzeba było przeczytać, wszystko byś wiedział z podstawowych informacji o obsłudze protokołu HTTP. A co do wysyłania obrazków na elektrodę, to spróbuj tą funkcją albo po prostu zobacz pod snifferem czy debguerrem HTTP co jest wysyłane przez prawdziwą przeglądarkę www, kiedy wysyłasz tam plik. I później postaraj się wysłać to samo lub najbardziej jak się da, zbliżone do tego. A i nie rozumiem też, dlaczego martwiłeś się że useragent jest na coś ustawiony - na przykład Flash. Pod Synapse bez problemów ustawisz sobie dowolny UserAgent.

0

Potwierdzam, śmiga na synapse, z ciekawości chciałem przerobić na indy 9, ale
nie wychodzi mi... czy T49 może pokazać jak zrobił to na indy?

0
Jangcy napisał(a):

Potwierdzam, śmiga na synapse, z ciekawości chciałem przerobić na indy 9, ale
nie wychodzi mi... czy T49 może pokazać jak zrobił to na indy?

do uses dodaj: IdMultipartFormData

var
SRC: TIdMultiPartFormDataStream;
begin
SRC := TIdMultiPartFormDataStream.Create;
SRC.AddFile('Filedata', sciezka);
IdHTTP1.Post(STRONA, SRC); //możesz dać Memo1.Text := idHttp1.... itd by wynik kodu strony w memo był
SRC.Free;
end;

a i pamiętaj o

IdHTTP1.Request.ContentType := 'multipart/form-data'; //choć możesz to ręcznie wklepać w komponencie

Mniej więcej tak. Jakby coś było źle, daj znać, sprawdzę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1