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
2,260
Được thích
3,001
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