Ok, để upload file qua http thì dĩ nhiên bạn phải biết cấu trúc gói tin theo định dạng http rồi từ đó xây dựng gói tin theo đúng định dạng đó. Khi đó gói tin được gửi đi sẽ giống hệt với những gì mà trình duyệt gửi đi khi bạn upload file bằng trình duyệt. Một gói tin theo phương thức POST thì đại loại như sau:
Mã:
1. POST /path HTTP/1.02. Host: hostname3. User-Agent: whatever you want..../*Firefox sẽ là:User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; v:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1*/ 4. Accept: image/png,*/*;q=0.55. Accept-Language: en-us,en;q=0.56. Accept-Encoding: gzip,deflate7. Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.78. Keep-Alive: 3009. Referer: whatever you want10. Cookie: __utma=233980825.275442633.1176451854.1176473654.1176509897.3; __utmz=233980825.1176451854.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); JSESSIONID=0723EE3CC52250179503578502607239.tomcat5c11. Authorization: I don't know12. Content-Type: application/x-www-form-urlencoded13. Content-Length: sizeof data 14. data
Và đây là tất cả những gì cần gửi khi mình login vào Yahoo:
Mã:
POST /config/login? HTTP/1.1Host: login.yahoo.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveReferer: https://login.yahoo.com/config/login_verify2?&.src=ymCookie: F=a=HZAuJdssvfxgvgsyX9RqmOINWzhObYtitmp8fw7ctud5r3eOH9s70YvM7S1d&b=maFL; U=mt=eTbbTZ2MhYr570pgzNc.REeF7vSl2lRCvR5Kew--&ux=NE0OGB&un=64fkaasqvgs69; B=aet8s15314fuq&b=3&s=lc; op122geohomeliid=a0060330k6234nh0122oqfa9e; op122geohomegum=a0060330k6234nh0122oqfa9e; YLS=v=1&p=0&n=0; Y=v=1&n=c57bq20mh8n76&p=; YGCV=d=; PH=fn=numo7umpIZrpHAV.; HP=1; sS=l=m08j7eij/oContent-Type: application/x-www-form-urlencodedContent-Length: 297.tries=1&.src=ym&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass=&.partner=&.u=er0i09p33qmsr&.v=0&.challenge=Kx5bO1w.x76QKJ2MglGzle7xA7nh&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=0&.chkP=Y&.done=http%3A%2F%2Fmail.yahoo.com&.pd=ym_ver%253d0%2526c%3D&login=******&passwd=******&.save=Sign+In
(******) là username và pass của mình nên dĩ nhiên ở đây phải đổi đi rồi [IMG]images/smilies/biggrin.png[/IMG]
Tuy nhiên vì bạn POST lên host của mình (chắc vậy) nên để đơn giản có thể chỉ cần để lại các dòng: 1, 2, 12, 13, 14 là được.
Ở đây của bạn là upload file nên việc xây dựng data (14) là khá phức tạp. Bạn có thể tham khảo code này
http://www.alhem.net/Sockets/html/cl...ostSocket.html
Bạn download thư viện đó về rồi dịch ra (file .lib) và sau đây là cách sử dụng nó:
Mã:
#include "stdafx.h"#include "../socket/HttpPostSocket.h"#include "../socket/SocketHandler.h" ...using namespace std;ULONG Upload(){ string buffer; SocketHandler h; HttpPostSocket s(h, "http://hostname/upload.php"); unsigned char* p = new unsigned char[32000]; memset(p, 0, 32000); s.SetDataPtr(p, 31999); s.AddFile("image", "filename", "text/plain"); s.Open(); h.Add(&s); while (h.GetCount()) { h.Select(1, 0); } bool complete = s.Complete(); if (complete) { buffer = static_cast<std::string>((char*)s.GetDataPtr()); } return 1;}
đoạn code trên tương ứng với đoạn code html tạo ra một cái form rồi ấn submit
Mã:
<form action="http://hostname/upload.php" method = POST><input type="file" name = "image" value = "filename" /><input type ="submit" /></form>
Ngoài ra có một thư viện khá nổi tiếng là cURL và liburl (cái này mình cũng đang nghiên cứu) có thể dùng cho rất nhiều giao thức khác nhau:
curl is a command line tool for transferring files with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE and LDAP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer resume, proxy tunneling and a busload of other useful tricks.
Tạm thời thế đã [IMG]images/smilies/biggrin.png[/IMG]
Vừa qua, Chính phủ đã ban hành Quyết định số 2383/QĐ-TTg ngày 09/12/2013 về việc xếp hạng di tích quốc gia đặc biệt. Theo đó, khu di tích Đường Trường Sơn - Đường Hồ Chí Minh là 1 trong 14 kỷ vật...
Các relic, danh thắng được xếp...