Ossianaa / node-libcurl

node-libcurl is a request library that mimics chrome ja3 fingerprints
https://www.npmjs.com/package/@ossiana/node-libcurl
MIT License
40 stars 8 forks source link

Proxy Doesn't Change #23

Closed mehmetuken closed 1 hour ago

mehmetuken commented 2 hours ago

Hi, No matter how many request.session objects I create in the same Node.js process, it always uses the initially assigned proxy and ignores other proxies. Even if I pass a new proxy as a parameter when doing session.get, it still uses the first proxy.

const proxies = [
    {
        proxy: 'http://localhost:3000',
        username: 'user1',
        password: 'password1',
    },
    {
        proxy: 'http://localhost:3001',
        username: 'user2',
        password: 'password2',
    },
    {
        proxy: 'http://localhost:3002',
        username: 'user3',
        password: 'password3',
    },
];

for (const proxy of proxies) {
    const session = requests.session({
        proxy: proxy,
    });

    const response = session.get('https://ipinfo.io/json');
    console.log(response.json);

    const response2 = session.get('https://ipinfo.io/json', {
        proxy: proxies[1],
    });
    console.log(response2.json);

}
// Output:
// ip from proxy 0
// ip from proxy 0

// ip from proxy 0
// ip from proxy 0

// ip from proxy 0
// ip from proxy 0
Ossianaa commented 2 hours ago

Looks like a socket connect reuse problem ...

mehmetuken commented 1 hour ago

This issue is resolved, but in cases like Promise.all, it still uses the first assigned proxy.

const proxies = [
    {
        proxy: 'http://localhost:3000',
        username: 'user1',
        password: 'password1',
    },
    {
        proxy: 'http://localhost:3001',
        username: 'user2',
        password: 'password2',
    },
    {
        proxy: 'http://localhost:3002',
        username: 'user3',
        password: 'password3',
    },
];

async function sendRequest(proxy) {
    const session = requests.session({
        proxy: proxy,
    });

    const response = session.get('https://ipinfo.io/json');
    console.log(response.json);

    const response2 = session.get('https://ipinfo.io/json', {
        proxy: proxies[1],
    });
    console.log(response2.json);
}

const promises = proxies.map(proxy => sendRequest(proxy));
await Promise.all(promises);
Ossianaa commented 1 hour ago

This issue is resolved, but in cases like Promise.all, it still uses the first assigned proxy.

give me a code

mehmetuken commented 1 hour ago

This issue is resolved, but in cases like Promise.all, it still uses the first assigned proxy.

give me a code

I edited and added the comment above.

Ossianaa commented 1 hour ago

This issue is resolved, but in cases like Promise.all, it still uses the first assigned proxy.

give me a code

I edited and added the comment above.

look like CURLOPT_PIPEWAIT cause problem

mehmetuken commented 1 hour ago

It's solved. Thank you so much!