Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    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]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •