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 [Solved] Vấn đề http:// và https:// của winhttp.au3

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi Quản lượng, 10/8/17.

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

    Quản lượng qlf
    • 18/23

    Tham gia ngày:
    27/4/17
    Bài viết:
    74
    Đã được thích:
    39
    Em chưa được học bất cứ gì về mạng máy tính cả. Em có một thắc mắc mà bữa giờ chưa giải quyết được: Tại sao tất cả các trang web https:// em request qua. Dùng _httprequest.au3 thì tốt còn winhttp.au3 thì bị lỗi?
    Đây là code request lấy source của https://www.facebook.com, nó ra tùm lum, tùm la =)
    Mã (AutoIt):
    #include<_HttpRequest.au3>

    Global $hOpen = _WinHttpOpen()
    Global $hConnect = _WinHttpConnect($hOpen,'www.facebook.com')
    Global $hRequest = _WinHttpOpenRequest($hConnect,'GET','/')
    _WinHttpAddRequestHeaders($hRequest,'Host: www.facebook.com')
    _WinHttpAddRequestHeaders($hRequest,'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0')
    _WinHttpAddRequestHeaders($hRequest,'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
    _WinHttpAddRequestHeaders($hRequest,'Accept-Language: en-US,en;q=0.5')
    _WinHttpAddRequestHeaders($hRequest,'Accept-Encoding: gzip, deflate, br')
    _WinHttpAddRequestHeaders($hRequest,'Connection: keep-alive')
    _WinHttpAddRequestHeaders($hRequest,'Upgrade-Insecure-Requests: 1')
    _WinHttpSendRequest($hRequest)
    if (_WinHttpReceiveResponse($hRequest)=1) Then
        $header = _WinHttpQueryHeaders($hRequest)
    ;~     $Data = _Gzip_Read_Data($hRequest)
    ;~     $Data = _WinHttpSimpleReadData($hRequest)
        $Data = _WinHttpReadData_Ex($hRequest)
        _FileWrite_Test($Data)
    EndIf
    _WinHttpCloseHandle($hRequest)
    _WinHttpCloseHandle($hConnect)
    _WinHttpCloseHandle($hOpen)


    Func _Gzip_Read_Data($hRequest)
        Return BinaryToString(__ZL_GZUncompress(_WinHttpSimpleReadData($hRequest,2)),4)
    EndFunc
    Xin nhờ cao nhân chỉ điểm ạ!
     
  2. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    _HttpRequest tích hợp sẵn chuyển đổi:
    + Port http(80) -> https(443)
    + Flag http(0) -> https(0x800000)

    Trang facebook protocol là https nên cậu cần set lại port, flag mặc định:
    $hConnect = _WinHttpConnect($hOpen, 'www.facebook.com', 443)
    $hRequest = _WinHttpOpenRequest($hConnect, 'GET', '/', '', '', '', 0x800000)

    hoặc cách khác là dùng hàm _WinHttpSimpleSendSSLRequest, cậu tham khảo file Help WinHttp đính kèm với UDF WinHttp, nó có ví dụ về hàm này ^^
     
    Quản lượng and nghiahsgs like this.
  3. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    Chú ý là đừng bao giờ thêm:
    _WinHttpAddRequestHeaders($hRequest, 'Accept-Encoding: gzip, deflate, br')
    Chỉ thêm header Accept-Encoding khi trang nó báo lỗi bắt buộc phải có header đó, còn không cậu đừng thêm vì dễ gây lỗi ký tự khi lấy dữ liệu.
     
    Quản lượng thích bài này.
  4. nghiahsgs

    nghiahsgs Thành viên mới
    • 3/6

    Tham gia ngày:
    14/4/16
    Bài viết:
    10
    Đã được thích:
    3
    https thì c phải thêm cái flag secure nữa =))
     
  5. Quản lượng

    Quản lượng qlf
    • 18/23

    Tham gia ngày:
    27/4/17
    Bài viết:
    74
    Đã được thích:
    39
    Cảm ơn bác :) Em đã làm được rồi :)
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này

Đang tải...