kiến thức Request và Response - Demo làm tool chơi voz

Bài viết mang tính chất về kiến thức lập trình cho anh em, không nhằm mục đích phá hoại.
Trong bài này em xin chia sẻ cách làm tool post comment voz. Anh em có thể tùy biến sáng tạo tùy thích nhé :beauty: Hiện tại đội ngũ dev chưa update capcha google nên mọi thứ khá dễ. Đợi update thì tool sẽ update sau.

Ok vô bài thôi nào, đầu tiên muốn biết post 1 comment lên voz như thế nào thì phải biết nó cần những gì. Bật chương trình bắt hết mọi traffic cho đến lúc post xong comment (mình dùng fiddler). Thu hoạch được 5 cái cần thiết
  1. GET - trang chủ https://next.voz.vn/
  2. GET - form log in https://next.voz.vn/login/?_xfRequestUri=/&_xfWithData=1&_xfToken=1584271768,0ae205ad6d03b27de7f56ce68216df9a&_xfResponseType=json
  3. POST - log in https://next.voz.vn/login/login - dataPost: login={user}&password={pass}&remember=1&_xfRedirect=https%3A%2F%2Fnext.voz.vn%2F&_xfToken=1584271776%2C39db907c9641da1068b6608a867b22c9
  4. GET - link cần comment - https://next.voz.vn/threads/abc.1/
  5. POST - comment - https://next.voz.vn/threads/abc.1/add-reply - dataPost multipart/form-data
1584274279252.png


Tại sao cần phải GET trước khi POST? Ở 1 số website, bạn có thể post thẳng data luôn chả cần get gì cả đâu, nhưng ở đây khi POST data thì nó yêu cầu xfToken. Cái token này nằm ẩn ở website khi bạn GET về nên buộc phải GET nó.

Ok sau khi đã có hết mọi thứ thì viết tool thôi. Demo code snippet bằng C# bước 5. Bước này mình gặp khó khăn vì nó khá là mới với mình.
Code:
            var dataPostComment = new MultipartFormDataContent
            {
                {new StringContent("<p>Hello_World</p>"), "message_html"},
                {new StringContent(valueHash), "attachment_hash"},
                {new StringContent(valueHashCombine), "attachment_hash_combined"},
                {new StringContent(valueLastDate), "last_date"},
                {new StringContent(valueLastKnownDate), "last_known_date"},
                {new StringContent(xfToken), "_xfToken"},
                {new StringContent(uri), "_xfRequestUri"},
                {new StringContent("1"), "_xfWithData"},
                {new StringContent(xfToken), "_xfToken"},
                {new StringContent("json"), "_xfResponseType"}
            };
            var responsePostComment = await httpClient.PostAsync(urlAddreply, dataPostComment);
            var contentResPostComment = await responsePostComment.Content.ReadAsStringAsync();
            return result;

Mọi attribute post đều nằm trong data GET cả. Các attribute mình dùng thư viện HtmlAgilityPack để lấy. Ví dụ attachment_hash
Code:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(contentResLink);

HtmlNode nodeHash = doc.DocumentNode.SelectSingleNode("//input[@name='attachment_hash']");
string valueHash = nodeHash.Attributes["value"].Value;

Chúc các bạn thành công :hungry:

-------------

Update tool tải tất cả các hình ảnh của các thread voz
https://next.voz.vn/threads/tool-tai-tat-ca-hinh-anh-1-topic.5387/

Link tải: https://drive.google.com/open?id=1DbwliQNID7cgAJb4MVMYhz2rx-5rN-Bg

Hướng dẫn sử dụng:
  • File account.txt: Nhập username|pass. Vì next voz yêu cầu tài khoản để tải các hình attachment nên bắt buộc phải nhập nhé mấy thím. Không lộ acc đâu mấy thím yên tâm :byebye:
  • File link.txt: TẤT CẢ các link threads cần tải chỉ cần 1 lần duy nhất, mỗi link 1 dòng. Định dạng link|page-bắt-đầu|page-kết-thúc. Nếu muốn tải all page thì các thím cứ nhập page kết thúc 1000 hoặc 10000... Ví dụ https://next.voz.vn/threads/no-sex-test-dang-anh-nextvoz.613/|1|100 thì sẽ tải từ page 1 đến page 100.
Chúc mấy thím dùng vui vẻ :byebye:
 
Last edited:
bypass firewall của cf hay là bypass để lấy ip gốc vậy thím
Em nghĩ là firewall.
Em mở trên trình duyệt thì xem được ảnh bình thường.
Tuy nhiên em lấy url của ảnh get qua http request thì báo lỗi cf.
Mở ảnh trong private cũng bị.
 
Em nghĩ là firewall.
Em mở trên trình duyệt thì xem được ảnh bình thường.
Tuy nhiên em lấy url của ảnh get qua http request thì báo lỗi cf.
Mở ảnh trong private cũng bị.
Cái này là firewall chống ddos của cloudflare, cách vượt thì thím xác định ip thật sự của máy chủ, rồi sau đó trỏ ảnh về ip đó (không phải trang nào cũng vượt được kiểu này)
 
Cái này là firewall chống ddos của cloudflare, cách vượt thì thím xác định ip thật sự của máy chủ, rồi sau đó trỏ ảnh về ip đó (không phải trang nào cũng vượt được kiểu này)
Có cách nào không bác. Em không rành về mảng web lắm.
Em thấy IDM download được. Không hiểu nó xử lý kiểu nào.
 
cho hỏi xong khi login xong thì các request sau bác cho cookie hay gì vào request để server nhận ra đó là bạn, và cho vào kiểu gì ạ
 
cho hỏi xong khi login xong thì các request sau bác cho cookie hay gì vào request để server nhận ra đó là bạn, và cho vào kiểu gì ạ

Vẫn lấy tiếp cái HttpClient từ request đầu tiên để gửi tiếp các request tiếp theo bác. Không tạo HttpClient mới.
 
hiểu nhưng phải cho cookie hay thông tin gì vào chứ nhỉ
Không cần bác, vì nó là request liên tục theo thứ tự nên cookie nó sẽ tự động set sau mỗi lần request. Ví dụ bác load next voz, bật f12 bác sẽ thấy lần đầu cookie nó chưa có gì hết
1584604438663.png


Lần 2 nó tự động set cookie cho mình luôn
1584604517829.png


Bác debug rồi mở cái httpClient ra sau mỗi lần request thì sẽ thấy nó tự thay đổi cookie.
 
Không cần bác, vì nó là request liên tục theo thứ tự nên cookie nó sẽ tự động set sau mỗi lần request. Ví dụ bác load next voz, bật f12 bác sẽ thấy lần đầu cookie nó chưa có gì hết
View attachment 9234

Lần 2 nó tự động set cookie cho mình luôn
View attachment 9239

Bác debug rồi mở cái httpClient ra sau mỗi lần request thì sẽ thấy nó tự thay đổi cookie.
vậy là thằng C# nó tự set cookie vào httpclient hả thím :adore:
 
Back
Top