Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Upload file qua HTTP bằng sử dụng VC++?

  1. #1
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    78

    Mặc định Upload file qua HTTP bằng sử dụng VC++?

    mình muốn lập trình để gửi 1 file bằng giao thức FPT hoặc http, lập trình bằng VC++ , bạn nào từng làm qua có thể giúp mình, nếu có code minh họa càng tốt
    --thanks--

  2. #2
    Ngày gia nhập
    07 2006
    Bài viết
    166

    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:
    Post Code:
    1. 1. POST /path HTTP/1.0
    2. 2. Host: hostname
    3. 3. User-Agent: whatever you want....
    4. /*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*/
    5.  
    6. 4. Accept: image/png,*/*;q=0.5
    7. 5. Accept-Language: en-us,en;q=0.5
    8. 6. Accept-Encoding: gzip,deflate
    9. 7. Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    10. 8. Keep-Alive: 300
    11. 9. Referer: whatever you want
    12. 10. Cookie: __utma=233980825.275442633.1176451854.1176473654.1176509897.3; __utmz=233980825.1176451854.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); JSESSIONID=0723EE3CC52250179503578502607239.tomcat5c
    13. 11. Authorization: I don't know
    14. 12. Content-Type: application/x-www-form-urlencoded
    15. 13. Content-Length: sizeof data
    16.  
    17. 14. data

    Và đây là tất cả những gì cần gửi khi mình login vào Yahoo:
    Post Code:
    1. POST /config/login? HTTP/1.1
    2. Host: login.yahoo.com
    3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
    4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    5. Accept-Language: en-us,en;q=0.5
    6. Accept-Encoding: gzip,deflate
    7. Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    8. Keep-Alive: 300
    9. Connection: keep-alive
    10. Referer: https://login.yahoo.com/config/login_verify2?&.src=ym
    11. Cookie: 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/o
    12. Content-Type: application/x-www-form-urlencoded
    13. Content-Length: 297
    14. .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
    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ó:

    Visual C++ Code:
    1. #include "stdafx.h"
    2. #include "../socket/HttpPostSocket.h"
    3. #include "../socket/SocketHandler.h"
    4.  
    5. ...
    6. using namespace std;
    7. ULONG Upload()
    8. {
    9.     string buffer;
    10.     SocketHandler h;
    11.     HttpPostSocket s(h, "http://hostname/upload.php");
    12.     unsigned char* p = new unsigned char[32000];
    13.     memset(p, 0, 32000);
    14.     s.SetDataPtr(p, 31999);
    15.    
    16.    
    17.     s.AddFile("image", "filename", "text/plain");
    18.     s.Open();
    19.     h.Add(&s);
    20.     while (h.GetCount())
    21.     {
    22.         h.Select(1, 0);
    23.     }
    24.     bool complete = s.Complete();
    25.     if (complete)
    26.     {
    27.         buffer = static_cast<std::string>((char*)s.GetDataPtr());
    28.     }
    29.    
    30.     return 1;
    31. }

    đ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
    HTML Code:
    1. <form action="http://hostname/upload.php" method = POST>
    2. <input type="file" name = "image" value = "filename" />
    3. <input type ="submit" />
    4. </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ế đã
    Đã được chỉnh sửa lần cuối bởi vinhie47 : 06-05-2007 lúc 11:50 AM.

Các đề tài tương tự

  1. Kiểm tra file ảnh trước khi upload
    Gửi bởi svhoctap trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 1
    Bài viết cuối: 20-10-2013, 12:00 AM
  2. Cách giữ lại file trong upload file?
    Gửi bởi nghiakhoi trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 2
    Bài viết cuối: 13-08-2013, 07:23 PM
  3. Download File bằng cách stream file thông qua giao thức HTTP và WebAPI
    Gửi bởi hanlong1080 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 21-06-2013, 05:19 PM
  4. làm sao để upload file = <input type="file....
    Gửi bởi pvtam2a trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 16
    Bài viết cuối: 14-06-2012, 01:10 AM
  5. hướng dẫn upload file từ url, link của file.
    Gửi bởi giadinhvnvn trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 30-01-2012, 08:43 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn