1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hỏi đáp Không thể tải file từ 1 URL bằng InetGet

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi hoanghuy, 15/12/19.

Trạng thái chủ đề:
Không mở trả lời sau này.
  1. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    3
    huynh nào cho em biêt code em sai ở đoạn nào không ạ, nó không chịu tải cái winrar xuống :(
    Mã (AutoIt):
    #include <InetConstants.au3>
    #include <MsgBoxConstants.au3>
    $file=InetGet("https://www.win-rar.com/fileadmin/winrar-versions/winrar/winrar-x64-580.exe","C:\Users\HuyPRO\Desktop\Downloads\Programs",0,1)
    $file1=InetGetInfo($file,1)
    MsgBox(0,'',$file1)
     
  2. longtu

    longtu Thành viên
    • 18/23

    Tham gia ngày:
    9/8/17
    Bài viết:
    66
    Đã được thích:
    35
    điều sai thứ nhất: bạn dòm lại tham trị thứ 2 hàm InetGet bạn nạp là đường dẫn folder hay đường dẫn file exe ?
    điều sai thứ hai: nhìn code là chắc không hiểu cách dùng InetGetInfo rồi, vui lòng tô đen hàm InetGetInfo trong scite rồi nhấn F1 để xem cách dùng và ví dụ của nó
     
  3. #Rainy# Hoàng Vũ IT

    #Rainy# Hoàng Vũ IT Hoàng Vũ IT Moderator
    • 43/45

    Tham gia ngày:
    21/11/16
    Bài viết:
    381
    Đã được thích:
    111
    Nơi ở:
    Quận 12 TP. Hồ Chí Minh
    Chỉnh sử chút là không cần bôi đen nha ông. để đó và F1 thôi.
    1. như bạn trên nói. sai cách sử dụng hàm InetGet.
    2. khi bạn sử dụng tải bằng nền.(tham số background = 1) thì nên sử dụng vòng lặp để check InetGetinfo nhé.
     
  4. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    3
    Em vào mục p445
    Dạ, em vào mục programs cũng không thầy file winrar được tải về ạ
     
  5. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    3
    Đường dẫn exe là gì nữa vậy ạ ?
     
  6. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    646
    Đã được thích:
    1,162
    1/
    Mã (AutoIt):
    InetGet ( "URL", "filename" [, options = 0 [, background = 0]] )
    → Param "filename": Đường dẫn (nếu có) + Tên của file sẽ lưu sau khi tải về, ví dụ:
    • "winrar-x64-580.exe" : lưu file với tên winrar-x64-580.exe ở cùng thư mục với script
    • "C:\ABC\winrar-x64-580.exe": lưu file với tên winrar-x64-580.exe ở thư mục ABC ổ C
    • @Desktop & "\winrar-x64-580.exe" lưu file với tên winrar-x64-580.exe ở desktop
    • .....
    Thým viết: "C:\Users\HuyPRO\Desktop\Downloads\Programs": đây là đường dẫn của 1 thư mục chứ không phải đường dẫn của 1 file (tức nhiên trừ phi ý thým cái Programs là tên của file sẽ lưu mà không có extension ?)

    2/ Có lẽ để tải được tập tin "https://www.win-rar.com/fileadmin/winrar-versions/winrar/winrar-x64-580.exe" về máy thì cần phải set User-Agent cho Inet → sử dụng hàm HttpSetUserAgent

    3/ Khi sử dụng mode background (để tải file với progress, tải đa luồng...) thì hàm InetGet sẽ return ngay lập tức mà không chờ cho đến khi tải xong. Vì vậy để biết được đã tải xong hay chưa thì phải kết hợp với hàm InetGetInfo để tải. Thì hàm InetGetInfo sẽ trả về 1 mảng gồm 6 giá trị, nhưng ta sẽ lưu ý 3 giá trị đầu:
    [0]: Số bytes đã đọc được.
    [1]: Tổng size của file cần tải
    [2]: Đã tải về xong chưa ? Nếu rồi thì true, chưa thì false​
    Vậy khi dùng background mode thì ta sẽ phải sử dụng một vòng lặp (hoặc một timer như AdlibRegister, _WinApi_SetTimer...nếu không muốn bị chiếm code) để check mảng trả về [2] là true hay false để biết được đã tải về xong chưa.

    Vậy ta có một code mẫu đơn giản tải file với progres như sau:

    Mã (AutoIt):
    HttpSetUserAgent('HuanHoang')
    $hDownload = InetGet("https://www.win-rar.com/fileadmin/winrar-versions/winrar/winrar-x64-580.exe", @DesktopDir & '\winrar.exe', 1, 1)
    $PhanTramDaTaiDuoc_Old = 0

    Do
        $aInfo = InetGetInfo($hDownload)
        If $aInfo[1] <> 0 Then ;chỉ bắt đầu progress khi đã lấy được tổng kích thước file cần tải
            $PhanTramDaTaiDuoc = Round(($aInfo[0] / $aInfo[1]) * 100, 1)
            If $PhanTramDaTaiDuoc_Old <> $PhanTramDaTaiDuoc Then ; Phải dùng dòng này vì nếu không có nó thì console sẽ ghi liên tục những giá trị $PhanTramDaTaiDuoc giống nhau
                ConsoleWrite($PhanTramDaTaiDuoc & '%' & @CRLF) ;vì là test nên dùng ConsoleWrite cho gọn, còn thực tế thì sử dụng ProgressBar để ghi Progress
                $PhanTramDaTaiDuoc_Old = $PhanTramDaTaiDuoc
            EndIf
        EndIf
    Until $aInfo[2] = True
    MsgBox(4096, 'Thông báo', 'Đã tải xong và lưu tập tin winrar.exe trong desktop')
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này

Đang tải...