Skip to content

Proxy Script

Mặc dù bạn có thể viết script để lấy proxy và test trực tiếp trong lúc tạo profile, nhưng trên Bịp Studio cũng hỗ trợ bạn test phần này, bấm vào tab NETWORK, chọn proxy type là Custom. Sau đó mở tab PROXY SCRIPT trong khu vực soạn code và bắt đầu viết script.

Proxy Script

Proxy Script hỗ trợ các hàm sau đây.

SetResult#

Hàm này bắt là bắt buộc, bất kể bạn xử lý ra sao thì cuối cùng cần gọi hàm này để trả kết quả về cho Bịp.

Cú pháp
await SetResult (result);
result là một object với các thuộc tính sau
Thuộc tính Mô tả
Type Proxy type, giá trị hợp lệ: http, socks4, socks5, ssh
Server Proxy server, bao gồm cả port nếu có
User Proxy user nếu có
Password Password nếu có
Error Trong trường hợp bị lỗi, bạn có thể đặt thông báo lỗi vào thuộc tính Error, Bịp sẽ hiển thị lỗi lên cột Status.
Ví dụ
1
2
3
(async function(){
    SetResult({Type: "http", Server: "127.0.01:6969"});
})();

Log#

Hiện thông báo lên cột Status của profile đang chạy script lấy proxy mà bạn viết.

Cú pháp
await Log (text);
Các tham số
Tham số Mô tả
text Thông báo bạn muốn hiển thị dạng text

Ví dụ: Xem các hàm bên dưới.

RandomInt#

Tạo số nguyên ngẫu nhiên trong khoảng chỉ định.

Cú pháp
RandomInt (min, max);
Các tham số
Tham số Mô tả
min Đầu
max Đít

Ví dụ

1
2
3
4
(async function(){
    const r = RandomInt(10, 100);
    Log(r)
})()

RandomArray#

Lấy ngẫu nhiên một phần tử trong một mảng.

Cú pháp
RandomArray (array);
Các tham số
Tham số Mô tả
array Mảng cần lấy ngẫu nhiên

Ví dụ

1
2
3
4
5
(async function(){
    // const r = RandomArray(["a", "b", "c"]);
    const r = RandomArray([1,2,3,4]);
    Log(r)
})()

Delay#

Delay một khoảng thời gian chỉ định.

Cú pháp
Delay (ms);
Các tham số
Tham số Mô tả
ms Thời gian delay tính bằng milisecond

Ví dụ

1
2
3
4
5
(async function(){
    Log("Dừng khoảng chừng 2 giây!!!");
    await Delay(2000);
    Log("Chia sẻ cái tool này cho Bịp đi các ngài ++!");
})()

HttpRequest#

Thực hiện một http request, hữu ích khi bạn muốn tích hợp proxy qua API từ một nhà cung cấp nào đó.

Cú pháp
await HttpRequest (url, data, timeoutMS, headers);
Các tham số
Tham số Mô tả
url Link gửi request đến
data Dữ liệu gửi đi dạng POST
timeoutMS Thời hạn tính bằng mili giây, quá hạn mà máy chủ không trả về kết quả sẽ báo lỗi timed out
headers Tùy chỉnh http header

Kết quả trả về

Một object với các thuộc tính được minh họa như sau

{
    "status": 200, //http response code
    "headers": "raw response header",
    "body": "response body",
    "error": "", //lỗi trong trường hợp phát sinh
}
Ví dụ
(async function(){
    /*
    Giả sử nhà cung cấp bip-proxy có API http://bip-proxy.io/get-proxy?key=XXX với XXX là api key của bạn.
    Máy chủ bip-proxy sẽ trả về kết quả dạng JSON như sau

    OK =>  {"ok": true, "type": "http", "server": "12.234.56.89:6969"}
    Lỗi => {"ok": false, "message": "Máy chủ đang quá tải, xin thử lại sau ít phút!"}
    */

    Log("Đang lấy proxy từ máy chủ...");
    const res = await HttpRequest("http://bip-proxy.io/get-proxy?key=XXX");
    if(res.error) { //Nếu có lỗi trong quá trình thực thi request (mất mạng, timeout...)
        SetResult({Error: res.error});
    }
    else {
        const json = JSON.parse(res.body);

        if(!json.ok) //Máy chủ bip-proxy trả về lỗi
            SetResult({Error: json.message});
        else
            SetResult({Type: json.type, Server: json.server});
    }
})();

ReadFile#

Đọc dữ liệu từ một file dưới dạng text.

Cú pháp
await ReadFile (file);
Các tham số
Tham số Mô tả
file Đường dẫn đến file cần đọc

Kết quả trả về: Dữ liệu dạng text hoặc null nếu có lỗi

Ví dụ
(async function(){
    /*
    Giả sử bạn có file text ở ổ D:/proxies.txt với 3 proxy và bạn biết rõ nó là loại HTTP

    11.11.11.11:1111
    22.22.22.22:2222
    33.33.33.33:3333
    */

    //Đọc dữ liệu từ file text và chuyển thành dạng mảng
    const lines = ReadFile("D:/proxies.txt").trim().split("\n");

    //Lấy ngẫu nhiên một dòng.
    const randomProxy = RandomArray(lines).trim();

    //Trả kết quả về cho tool
    SetResult({Type: "http", Server: randomProxy});
})();

RootPath#

Đây là một hằng số chỉ đường dẫn hiện tại mà tool đang chạy.

Ví dụ
1
2
3
(async function(){
    Log(RootPath);
})();

BipGlobal#

Một object toàn cục tồn tại từ khi chạy tool cho đến khi bạn tắt, có thể truy cập từ bất cứ profile nào.

Ví dụ
1
2
3
4
5
(async function(){
    if(!BipGlobal.data) BipGlobal.data = [];
    BipGlobal.data.push(RandomInt(0, 10));
    Log(BipGlobal.data.join(","));
})();

Profile#

Một object chứa thông tin của profile đang chạy script, gồm có:

Thuộc tính Mô tả
Id Id của profile (có thể tháy ở cột ID)
Title Tên của profile
Index Thứ tự của profile trong list (có thể bị thay đổi nếu bạn sắp xếp list profile)
Ví dụ
(async function(){
    // Log(JSON.stringify(Profile));

    /*
    Quay trở lại ví dụ về hàm ReadFile ở trên,
    bây giờ giả sử bạn có 3 profile và muốn
        profile 1 chạy proxy đầu tiên
        profile 2 chạy proxy thứ 2
        profile 3 chạy proxy thứ 3
    */

    //Đọc dữ liệu từ file text và chuyển thành dạng mạng
    const lines = ReadFile("D:/proxies.txt").trim().split("\n");

    //Tùy theo index của profile đang chạy script mà trả về tương ứng
    const proxy = lines[Profile.Index];

    //Trả kết quả về cho tool
    SetResult({Type: "http", Server: proxy});
})();

Khi đã viết xong script, bạn có thể thiết lập cho profile của bạn trong tùy chọn proxy khi tạo profile.