Vấn đề HttpRequest "Get" trả về Response khác với Reponse thao tác trên trình duyệt (4 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:
    Ồ, ngon lành xịn quá.
    Cho em hỏi sao anh biết được:
    Mã:
    Const Url As String = "https://timfshare.com/api/v1/string-query-search?query="
    Hay công cụ nào, anh chia sẻ thêm với ạ.

    Thêm đoạn code Loop JSON để lấy link url.

    JavaScript:
    i = 1
        For Each Item In js("data")
            Sheet1.Cells(i, 2).Value = Item("url")
            i = i + 1
        Next

    Screen Shot 2024-08-07 at 11.07.21.png

    Screenshot at Aug 07 11-13-52.png
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Bên masothue vn họ sử dụng cách mới để chặn yêu cầu từ HTTP.
    Nên cần sử dụng trình duyệt Web để tải, nhưng vẫn bị mã số thuế vn họ kiểm duyệt, họ chủ yếu cho người dùng xem quảng cáo, để họ có thu nhập. Nhưng keo kiệt với người dùng.

    Tôi đã viết cả 2 bản nguồn Tổng cục thuế và masothue vn, tại Tài nguyên diễn đàn để mọi người cần sử dụng để tra cứu.

    Ngày trước tôi viết Http Request, giúp họ tiết kiệm chi phí chỉ với 2, 3 request là tải được thông tin, giờ do họ quá keo và khắc khe, tôi đã chuyển sang trình duyệt, bây giờ họ và người dùng đồng thời phải tốn kém chi phí gấp nhiều lần khi cần tải cả một trang web hoàn chỉnh để tải 1 thông tin. Tôi không hiểu tại sao họ lại keo đến vậy, 1 bên là ăn tiền quảng cáo với hàng chục quảng cáo trên 1 trang, 1 bên là nhà nước.
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Web KT

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

    Back
    Top Bottom