Vấn đề HttpRequest "Get" trả về Response khác với Reponse thao tác trên trình duyệt

Liên hệ QC

ongke0711

Thành viên gắn bó
Tham gia
7/9/06
Bài viết
1,947
Được thích
2,526
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

  • getWebData.xlsm
    84.5 KB · Đọc: 24
Lần chỉnh sửa cuối:
Một cách sửa lỗi trên là không dùng WinHTTP mà đổi sang MSXML2. Trong code tôi có viết sẳn rồi.

View attachment 265556


Nếu dùng WinHTTP thì bạn chạy file đính kèm xem sửa lỗi TLS của Windows xem còn lỗi không. Do máy tôi cài rồi nên chạy không lỗi.
Theo tôi biết thì nguyên nhân nó tương tự như nội dung bên dưới:

View attachment 265557

Và link down ở đây: https://docs.microsoft.com/en-us/an...-11-and-tls-12-easy-fix-download-missing.html

Còn về vụ khoá IP thì tôi không rành web nên nghĩ chắc họ dùng các tool để chống DDOS hoặc kỹ thuậnt anti-scraping gì đó.
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
1630946213492.png
 
Upvote 0
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

  • getWebData - MST.xlsm
    110.7 KB · Đọc: 8
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
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.
Nó vẫn ra thông tin chi nhánh mà 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
Web KT
Back
Top Bottom