Delphi-aplicație trimite date la server prin poștă (Indy)

În cazul în care dezvoltarea următoarei web-proiect sa confruntat cu sarcina - pentru a realiza software-ul client pe Delphi, care ar transmite datele la server, folosind metoda POST. Cererea trebuie să transmită textul și încărcați fișiere pe web-server.

Punerea în aplicare a unui astfel de date este trimis la server folosind limbile de dezvoltare web (de exemplu, PHP) este destul de simplu, dar dacă aveți nevoie pentru a scrie aplicații, software multi-utilizator, atunci există un pic mai greu pentru a comunica cu serverul. metodă directă de conectare la baza de date și serverul FTP de la Delphi - pentru că nu există nici o nu este sigur, nu este de încredere (schimba parolele, conexiunile de date, etc.) și creează în plus. problemele de compatibilitate pe partea de client. Pentru a rezolva problema, am decis să scrie limba de scripturi PHP (partea de server), care se va ocupa cereri POST primite și returnează un rezultat înapoi la client (aplicație de pe Delphi). Avantajele acestei abordări este că toate conexiunile și procesarea datelor are loc pe server, este mult mai sigur de a direcționa „Connect“.

Pornind de „to google“ a fost acordat o mulțime de informații disparate, acestea au fost în mare parte forumuri, dar a fost toate bucăți. Unul pentru a determina exact ceea ce folosit pentru a fi Indy, și anume componenta IdHTTP pusă în aplicare prin POST. De fapt, totul este simplu, această metodă are doi parametri de resurse Url și DataStream (flux de date), ca răspuns la rezultatul dă sub formă de text (așa cum poate fi un HTML cod al paginii). Practic aceasta constă în formarea corectă a datastream (flux de date transferate), dar în cursul a urcat capcane în încă alte aspecte, și anume codificarea rusească (fie nu fie bine). A fost apoi, și începe distracția pentru câteva ore de rătăcire în marea rețea. În general palavrageala, suficient, să trecem la practica și punerea în aplicare a software-ului.

Astfel, programul este simplu. Acesta trebuie să trimită datele la server metoda POST, date conține „Titlu“ (string), „Descriere“ (text multilinie) și un fișier imagine (jpg, png, date-gif binar). Serverul trebuie să accepte datele, la proces, pentru a salva un fișier imagine pe server și returnează răspunsul. Ca răspuns restituire aplicație Delphi, același text cu adaos de etichete, precum și un link către fișierul încărcat. Nimic mai mult.

Script-ul pe care doriți să salvați cu numele «indypost1.php».

Notă. Când salvați (prin intermediul unui notebook), trebuie să specificați codificare «UTF-8" , în caz contrar nu vor fi probleme cu afișarea chirilic!

În continuare, deschis Delphi, se aplică următoarea noastră aspectul de forma:

Următoarele componente sunt utilizate în structura: (. 2 buc) Label, buton (2 buc.), Edit (. 2 buc), Memo, CheckBox, OpenDialog, IdHTTP. Se specifică numele următoarelor componente ( „Name“ de proprietate):

IdHTTP1 CheckBox1 și concediu fără a schimba (obosit.)))).

Pentru a evita accidental „edita“ calea spre Edit (imgfile), expune-l proprietatea ReadOnly la True. Doar au chkfile imgfile și setați proprietatea Enabled la false. Noi le activa prin bifare și anume Noi oferim o alegere - pentru a descărca imaginea sau nu.

Pentru OpenDialog (PictDialog) trebuie să se stabilească un filtru (filtru de proprietate), după cum urmează:

Delphi-aplicație trimite date la server prin poștă (Indy)

De fapt, de formare vizuală este de peste! Noțiuni de bază pentru codificare!

În cadrul proiectului, vom genera un flux de date, folosind un tip a venit cu Indy - TidMultiPartFormDataStream. Deși implementări în întreaga pe TStream, dar lucrul cu TidMultiPartFormDataStream - usor!

Pentru acest tip a devenit disponibil pentru proiectul nostru, este necesar să se adauge următoarele utilizări de bibliotecă: IdMultipartFormData.

Pentru a crea un eveniment CheckBox1 OnClick (prin dublu-clic pe proiect) și montați-l în cazul în care codul de mai jos:

Aici vom activa imgfileichkfile obiecte supuse semn de disponibilitate de verificare (dacă este bifată caseta, obiectele devin active).

Acum aranja selectarea imaginilor. Pentru a face acest lucru, creați un eveniment OnClick pe butonul chkfile (doar dublu-clic pe obiect) și lista cu următorul text:

Acest eveniment va provoca dialogul imagine și dacă utilizatorul face clic pe „Open“, apoi calea către fișierul va fi adăugat la imgfile.

Și aici ajungem la butonul finală „POST“. Crearea unui eveniment OnClick pentru buton, și se adaugă următorul cod:

Datapost - tip de obiect TIdMultiPartFormDataStream. cerere POST permite de a forma structuri compuse din domenii de diferite tipuri.

date în «conținutul» transmis în mod similar.

Toate datele se formează, este necesar să le transfere la script pe server și a obține un răspuns:

deoarece TMemo înțelege linia tag-ul break "
„Noi folosim funcția“ StringReplace „să-l înlocuiască pe simbolurile clare line break“ # 13 # 10. "

La finalizarea tuturor șterge memoria liniei obiectului DataPost:

Deși în acest exemplu, acest lucru se va întâmpla în mod automat la finalul procedurii, dar toate ...

Rezultatele reale ale programului de lucru de pe ecran:

Astfel, putem trimite la server la fel de mult ca și fișiere de date, procesează datele de pe server și spune răspunsul de aplicare, rezultatul de a rula script-ul. Se poate pur și simplu să fie 0 sau 1, care va semnala cererea de reacție ulterioară.

Toate. Mult noroc pentru toată lumea. Sper că informațiile a fost de ajutor, și veți găsi o utilizare pentru ea.

Gata exemplu și un script puteți descărca aici.

Codul complet al modulului:

Vă rugăm să rețineți, schimbări în pregătirea datelor care urmează să fie trimise și răspunsurile primite, și se efectuează transcodare de la UTF8