Vấn đề HttpRequest "Get" trả về Response khác với Reponse thao tác trên trình duyệt (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

  • ongke0711

    Thành viên gắn bó
    Tham gia
    7/9/06
    Bài viết
    2,311
    Được thích
    3,112
    Giới tính
    Nam
    Chào các bạn,
    Tôi gặp một vấn đề là khi dùng Http request - GET thì nó trả về cái Response nhưng kiểm tra lại thì khác với Response tôi thao tác trực tiếp trên trang web.
    - Tìm theo MST, CCCD dùng "https://masothue.com/Ajax/Search/" thì chạy rất nhanh nhưng khi tìm bằng tên thì không chạy.
    - Tôi dùng "https://masothue.com/Search/?q" & chuỗi tên thì lại trả về Response sai. Đã thử khai báo các header đúng như trên trình duyệt cũng không sửa được lỗi.

    File đính kèm bên dưới. Nhờ các bạn hướng dẫn tìm ra nguyên nhân của vấn đề trên.
    Cảm ơn.


    Mã:
    Dim js As Object
        Set js = CreateObject("Scripting.Dictionary")
    
        Dim formData As String, sTenCty As String, res As String
        Const url As String = "https://masothue.com/Search/"
    
        res = httpPost("https://masothue.com/Ajax/Token", "")
        Set js = JsonConverter.ParseJSON(res)
    
        sTenCty = UCase(Sheet1.Range("A1"))
        formData = "?q=" & URLEncode(CStr(sTenCty), True) & "&type=enterpriseName&token=" & js("token") & "&force-search=1"
        Debug.Print url & formData
    
        res = httpGet(url & formData)
        Debug.Print res

    Mã:
    Function httpGet$(url$)
        'With CreateObject("WinHttp.WinHttpRequest.5.1")
        With CreateObject("MSXML2.serverXMLHTTP.6.0")
            .Open "GET", url, False
            .setRequestHeader "User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.51"
            .setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
            .send
            httpGet = .responseText
    
            Dim getStatus As String
            If Err.Number <> 0 Then
                'khong co phan hoi tu server
            Else
                getStatus = .Status
                If getStatus <> "300" And getStatus <> "200" Then
                    Debug.Print "Some problems raised."
                Else
                    Debug.Print "Connected."
                End If
            End If
    
            On Error GoTo 0
        End With
    End Function
     

    File đính kèm

    Lần chỉnh sửa cuối:
    Bạn bỏ cái header này đi xem còn chạy được không?

    View attachment 265569
    mình bỏ đoạn này vẫn không chạy được bạn !
    Bài đã được tự động gộp:

    Tôi nghĩ bạn viết đoạn code fake cái proxy của nó để hoàn chỉnh, proxy thì lấy mấy cái proxy free ở web nó làm mới thường xuyên nên có chết hay bị chặn cũng chẳng sao, lấy trong web này https://www.sslproxies.org/ lấy mấy thằng port 8080 thôi để hạn chế mấy cái proxy không hoạt động
    View attachment 265560
    đã thành công, tuy nhiên tốc độ request khá chậm, Mình có thể dùng IP gì hoặc ở nước nào cho tốc độ nhanh hơn được không bạn ?
    Cảm ơn bạn !
     
    Upvote 0
    Tôi đã hoàn thiện thêm code của file gửi trên trang đầu như sau:
    1. Thiết lập khai báo tìm tùy ý các thông tin
    2. Cho phép tìm MST chính xác, web thấy sao Excel thấy vậy.
    Do phần mềm xuất hóa đơn Invoice mình đang dùng không có chức năng "Lấy thông tin" từ web (như Misa hóa đơn click vào nút "Lấy thông tin" sẽ tự động tra cứu theo dữ liệu trên web thuế). Hiện tại "Danh sách khách hàng" trên phần mềm khi địa chỉ thay đổi sẽ không cập nhật lại, rất tốn thời gian kiểm tra lại và khi lỡ xuất hóa đơn rồi bên mua lại yêu cầu làm biên bản điều chỉnh hóa đơn nếu thông tin khách hàng thay đổi.
    Mình xin mượn code và file của anh Tuân để tra cứu mã số thuế. Mình chỉnh sửa lại code ghi dữ liệu theo cột (module TestMST_Column) mục đích để tra cứu được nhiều mã số thuế. Tuy nhiên mình thấy nhiều bài mấy bạn nói IP bị chặn nếu "sent" và "get" lên web nhiều quá, danh sách mình có khoản 200 mã số thuế cần dò lại, không biết nếu click tra cứu lấy một lúc 200 mã số thuế thì có bị chặn IP không, mình sợ bị chặn IP nên có để code cách 2s gửi lệnh 1 lần:
    Mã:
    Application.Wait Now + TimeValue("00:00:2")
    Mong anh chị xem giúp đỡ và tư vấn thêm giúp mình.
     

    File đính kèm

    Upvote 0
    Do phần mềm xuất hóa đơn Invoice mình đang dùng không có chức năng "Lấy thông tin" từ web (như Misa hóa đơn click vào nút "Lấy thông tin" sẽ tự động tra cứu theo dữ liệu trên web thuế). Hiện tại "Danh sách khách hàng" trên phần mềm khi địa chỉ thay đổi sẽ không cập nhật lại, rất tốn thời gian kiểm tra lại và khi lỡ xuất hóa đơn rồi bên mua lại yêu cầu làm biên bản điều chỉnh hóa đơn nếu thông tin khách hàng thay đổi.
    Mình xin mượn code và file của anh Tuân để tra cứu mã số thuế. Mình chỉnh sửa lại code ghi dữ liệu theo cột (module TestMST_Column) mục đích để tra cứu được nhiều mã số thuế. Tuy nhiên mình thấy nhiều bài mấy bạn nói IP bị chặn nếu "sent" và "get" lên web nhiều quá, danh sách mình có khoản 200 mã số thuế cần dò lại, không biết nếu click tra cứu lấy một lúc 200 mã số thuế thì có bị chặn IP không, mình sợ bị chặn IP nên có để code cách 2s gửi lệnh 1 lần:
    Mã:
    Application.Wait Now + TimeValue("00:00:2")
    Mong anh chị xem giúp đỡ và tư vấn thêm giúp mình.

    Bạn xem file demo bài #39
     
    Upvote 0
    Bạn ơi cho mình hỏi "Tra cứu theo danh sách" nếu MST chi nhánh (có thêm đuôi -001) thì kết quả chỉ trả về thông tin cty mẹ thôi hả bạn. Có cách nào hiện thông tin địa chỉ của chi nhánh không bạn.
     
    Upvote 0
    Nó vẫn ra thông tin chi nhánh mà bạn.
    Ví dụ MST như trong hình này nè bạn: 2 địa chỉ khác nhau, nếu MST chi nhánh thì địa chỉ như trong hình bên phải.
    MST.JPG
    Cho mình hỏi thêm khi click Tra cứu chi tiết thì báo lỗi tại dòng này:
    Error MST.JPG
     
    Upvote 0
    Ví dụ MST như trong hình này nè bạn: 2 địa chỉ khác nhau, nếu MST chi nhánh thì địa chỉ như trong hình bên phải.
    View attachment 267805
    Cho mình hỏi thêm khi click Tra cứu chi tiết thì báo lỗi tại dòng này:

    - Tôi có ghi chú đầu bài là lấy thông tin từ trang masothue.vn. Do đó nếu trang đó chưa cập nhật thì cũng bó tay.
    - Nút tra cứu chi tiết là dùng khi bạn tìm theo tên DN nhập ở ô bên trái --> nó sẽ trả về một danh sách các cty có tên giống vậy và bạn click chọn MST của Cty nào cần xem chi tiết.
     
    Upvote 0
    - Tôi có ghi chú đầu bài là lấy thông tin từ trang masothue.vn. Do đó nếu trang đó chưa cập nhật thì cũng bó tay.
    - Nút tra cứu chi tiết là dùng khi bạn tìm theo tên DN nhập ở ô bên trái --> nó sẽ trả về một danh sách các cty có tên giống vậy và bạn click chọn MST của Cty nào cần xem chi tiết.
    Chào bác ạ!
    Em xin phép quay lại chủ đề này, trước giờ em dùng file "TRA CỨU THÔNG TIN DOANH NGHIỆP.xlsm" vẫn hoạt động tốt tuy nhiên hôm nay em có thử thì báo lỗi như ảnh sau:
    1718790909575.png
    Có vẻ trang masothue.com đã thay đổi thuật toán ạ!
    Bác có thể xem giúp em không ạ!
     
    Upvote 0
    Chào bác ạ!
    Em xin phép quay lại chủ đề này, trước giờ em dùng file "TRA CỨU THÔNG TIN DOANH NGHIỆP.xlsm" vẫn hoạt động tốt tuy nhiên hôm nay em có thử thì báo lỗi như ảnh sau:
    View attachment 301824
    Có vẻ trang masothue.com đã thay đổi thuật toán ạ!
    Bác có thể xem giúp em không ạ!

    Bạn đổi dòng: setRequestHeader trong các POST, GET request như dòng dưới nhé.

    JavaScript:
    .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
     
    Upvote 0
    Bạn đổi dòng: setRequestHeader trong các POST, GET request như dòng dưới nhé.

    JavaScript:
    .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
    wow, cảm ơn bác nhiều ạ!
     
    Upvote 0
    Có một lưu ý là khi bấm chạy test các MST nhiều quá thì trang masothue.com nó sẽ hiện hộp thoại kiểm tra có phải Robot hay không. Khi đó bạn phải trả lời các câu hỏi của nó thủ công, file của tôi chưa làm được việc vượt cái hàng rào này nhé.
     
    Upvote 0
    Có một lưu ý là khi bấm chạy test các MST nhiều quá thì trang masothue.com nó sẽ hiện hộp thoại kiểm tra có phải Robot hay không. Khi đó bạn phải trả lời các câu hỏi của nó thủ công, file của tôi chưa làm được việc vượt cái hàng rào này nhé.
    Vâng ạ, cơ mà lúc đầu e cứ nghĩ là họ chèn thuật toán dùng Cloudflare hay cookie gì đó cơ. Mà chỉ cần đổi User-Agent từ Mac sang Win và nâng cấp Chrome mới hơn là được ạ! Hay còn ý nghĩa gì đằng sau không ạ?
     
    Upvote 0
    Có một lưu ý là khi bấm chạy test các MST nhiều quá thì trang masothue.com nó sẽ hiện hộp thoại kiểm tra có phải Robot hay không. Khi đó bạn phải trả lời các câu hỏi của nó thủ công, file của tôi chưa làm được việc vượt cái hàng rào này nhé.
    Họ đưa ra capcha để anh không thể vượt qua mà.
    Có chăng bẫy cái sự kiện có capcha, sai thì dùng IE nổi lên để điền cachap vào, hoặc dùng shell chạy Chorme / Firefox;
    Em mới ý tưởng thôi chứ chưa có làm lần nào.
     
    Upvote 0
    1/ ai hiểu và viết được các kiểu bài như thớt này là biết viết phần máy khách ( Client ) ...

    2/ chịu khó dò viết phần Máy chủ ( Server ) kết nối tới CSDL xong đẩy lên giao diện Web là xong ... vậy là tự viết thành công Server - Client

    3/ cái WebServer.dll của Tôi thay vì tạo giao diện web đẩy lên nhìn thấy dữ liệu thì Tôi loại bỏ nó đi thôi mà cho kết nối trực tiếp

    4/ cái vụ capcha tuỳ theo ai đó viết Web còn tôi thì xử lý một hàm nhỏ phía máy chủ nếu IP nào đó truy xuất liên tục trên 10 lần là khoá hay nổi lên cái Form nhập capcha thì lại cho truy xuất tiếp là xong

    ... gợi ý vài dòng vậy cho ai đam mê có hướng dò là ra vì thời đại AL cần gì có Em ChatGTP hỏi xong tư duy logis xong dò là ra
     
    Lần chỉnh sửa cuối:
    Upvote 0
    M
    Mới sửa lại cái file tra cứu theo các kiểu: MST , CCCD (CMND), Tên DN và thêm cái tìm theo danh sách MST vì lúc trước có bạn hỏi.

    View attachment 265542
    File chủa bạn mình thấy chạy rất nhanh, nhưng gặp trường hợp không có mã số thuế là dừng luôn.
    Đúng ra phải bỏ qua trường hợp không có thì chuyển sang kiểm tra hàng tiếp theo
     
    Upvote 0
    M

    File chủa bạn mình thấy chạy rất nhanh, nhưng gặp trường hợp không có mã số thuế là dừng luôn.
    Đúng ra phải bỏ qua trường hợp không có thì chuyển sang kiểm tra hàng tiếp theo
    Bạn tải lại file của bài #37 xem, tôi thấy nó chạy và bỏ qua dòng trống mà.

    Screen Shot 2024-06-28 at 21.15.38.png
     
    Upvote 0
    Web KT

    Bài viết mới nhất

    Back
    Top Bottom