Wysyłanie pliiku przez protokół HTTP

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

Wysyłanie pliiku przez protokół HTTP

Nowy postprzez Michalos » poniedziałek, 30 marca 2009, 14:50

Witam, tworzę programik do generowania opisów filmów i gier. Aplikacja pobiera źródło danego portalu i wyszukuje potrzebnych informacji, większość programu mam już ukończoną i działa ona bdb, chcę dodać możliwość przesyłania okładek na inny hosting z obrazkami, obrazek pobieram i zapisuje na dysku i wyświetlam w TImage, pojawia się problem jak chcę go wysłać na dany hosting z obrazkami, troszkę poszperałem w sieci i domyślam się, że do tego celu powinnienem użyć Zapytań POST/GET w zależności jaki dany hosting obsługuje, zazwyczaj jest to POST i tu pojawia się problem bo przy GET można w adresie WWW przesyłać ?login=XXX...itd. Znajomy mówił mi że ten obrazek muszę wczytać tak jakbym go notatnikiem otworzył, zapytanie jakie mi podesłał to:
Kod: Zaznacz cały
\n-----------------------------406657214215234864756857120\r\nContent-Disposition: form-data; name="UPLOAD_IDENTIFIER"\r\n\r\n1210944263_1238360028\r\n-----------------------------406657214215234864756857120\r\nContent-Disposition: form-data; name="upk"\r\n\r\ne3004747521ab7e7a0b4ce03c6383915\r\n-----------------------------406657214215234864756857120\r\nContent-Disposition: form-data; name="domain_lang"\r\n\r\npl\r\n-----------------------------406657214215234864756857120\r\nContent-Disposition: form-data; name="action"\r\n\r\nupload\r\n-----------------------------406657214215234864756857120\r\nContent-Disposition: form-data; name="MAX_FILE_SIZE"\r\n\r\n500000000\r\n-----------------------------406657214215234864756857120\r\nContent-Disposition: form-data; name="shareopt"\r\n\r\ntrue\r\n-----------------------------406657214215234864756857120\r\nContent-Disposition: form-data; name="the_file"; filename="name.jpg"\r
\nContent-Type: image/jpeg\r\n\r\n + dane pliku...

gdzie zamiast dane pliku, daje właśnie tą treść - tą jakbym otworzył obrazek notatnikiem, ale nie wiem jak się do tego zabrać. Myślałem tak, żeby obrazek wczytać do obiektu TStringList, albo do TMemo - ale czy to zrealizuje to co chcę osiągnąć ?
Upload chcę wykonać na strone tinypic.com. Jakbyście mieli chwile i mógł coś doradzić, czy robić to za pomocą Socketów ( o których nie mam pojecia) czy może biblioteka curl ( z którą mam problem z instalacja do Turbo C++) Chyba że jest jeszcze jakieś inne rozwiązanie, pakiet Indy? Indy->Post() ? Macie trochę doświadczenia i realizował podobne rzeczy wielokrotnie, więc liczę na obiektywna rade Dziękuje i Pozdrawiam serdecznie
Avatar użytkownika
Michalos
Bladawiec
Bladawiec
 
Posty: 35
Dołączył(a): niedziela, 19 października 2008, 11:45
Podziękował : 1
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Wysyłanie pliiku przez protokół HTTP

Nowy postprzez polymorphism » wtorek, 31 marca 2009, 15:00

Nie podałeś ważnej rzeczy - nagłówka POST:

    POST /upload.php HTTP/1.1<CRLF> <---- to może się zmienić
    Host: s5.tinypic.com<CRLF>
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8<CRLF>
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8<CRLF>
    Accept-Language: en-us,en;q=0.7,pl;q=0.3<CRLF>
    Accept-Encoding: gzip,deflate<CRLF>
    Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7<CRLF>
    Keep-Alive: 300<CRLF>
    Connection: keep-alive<CRLF>
    Referer: http://tinypic.com/<CRLF>
    Cookie: <dane cookie><CRLF>
    Content-Type: multipart/form-data; boundary=---------------------------406657214215234864756857120<CRLF>
    Content-Length: 6463<CRLF> <---- to oczywiście się zmienia
    <CRLF>
    <tu zawartość POSTa>
Wtedy zawartość będzie wyglądać tak:

    -----------------------------406657214215234864756857120<CRLF>
    Content-Disposition: form-data; name="UPLOAD_IDENTIFIER"<CRLF>
    <CRLF>
    1210944263_1238360028<CRLF> <---- to się zmienia
    -----------------------------406657214215234864756857120<CRLF>
    Content-Disposition: form-data; name="upk"<CRLF>
    <CRLF>
    e3004747521ab7e7a0b4ce03c6383915<CRLF> <---- to się zmienia
    -----------------------------406657214215234864756857120<CRLF>
    Content-Disposition: form-data; name="domain_lang"<CRLF>
    <CRLF>
    pl<CRLF>
    -----------------------------406657214215234864756857120<CRLF>
    Content-Disposition: form-data; name="action"<CRLF>
    <CRLF>
    upload<CRLF>
    -----------------------------406657214215234864756857120<CRLF>
    Content-Disposition: form-data; name="MAX_FILE_SIZE"<CRLF>
    <CRLF>
    500000000<CRLF>
    -----------------------------406657214215234864756857120<CRLF>
    Content-Disposition: form-data; name="shareopt"<CRLF>
    <CRLF>
    true<CRLF>
    -----------------------------406657214215234864756857120<CRLF>
    Content-Disposition: form-data; name="the_file"; filename="name.jpg"<CRLF>
    Content-Type: image/jpeg<CRLF>
    <CRLF>
    <dane pliku... >
    -----------------------------406657214215234864756857120--<CRLF>

Niektóre rzeczy musisz wyciągnąć ze strony startowej:
Kod: Zaznacz cały
<form action="http://s5.tinypic.com/upload.php" method="post" enctype="multipart/form-data" name="uploadForm" target="upload_iframe" id="uploadForm">
   <input type="hidden" name="UPLOAD_IDENTIFIER" id="uid" value="1210944263_1238360028" />
   <input type="hidden" name="upk" value="e3004747521ab7e7a0b4ce03c6383915" />
   <input type="hidden" name="domain_lang" value="pl" />
   <input type="hidden" name="action" value="upload" />
   <input type="hidden" name="MAX_FILE_SIZE" value="500000000" />
   <input type="hidden" name="shareopt" value="true" />


Całego POSTa możesz złożyć w TMemoryStream, a następnie wysłać socketem.

______
PS. niektóre rzeczy z nagłówka pewnie można usunąć, ale...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Wysyłanie pliiku przez protokół HTTP

Nowy postprzez GrzesiuS » piątek, 27 listopada 2009, 19:35

Michalos moglbys rzucic kawalkiem kodu jesli udalo Ci sie zrobic to wysylanie?
Avatar użytkownika
GrzesiuS
Bladawiec
Bladawiec
 
Posty: 1
Dołączył(a): piątek, 27 listopada 2009, 19:32
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows 7 x64
Kompilator: C++ Builder
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje sieciowe

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 8 gości

cron