Comments (4)
It was also impossible to implement AsyncDisposable for DispatcherBase. That would solve the try finally problem.
This would solve the problem of cleaning up resources without using try finally.
import { Agent, request } from 'undici';
import { buildHttpProxyConnector } from '@undicijs/proxy';
// Connectors only for wrapping socket connection for distonation host
const httpProxyConnector = buildHttpProxyConnector('http://3proxy:8080');
// disposable agent
class DisposableAgent extends Agent implements AsyncDisposable {
[Symbol.asyncDispose]() {
return this.close();
}
}
/**
* get ip address with disposable agent via httpProxyConnector
*/
async function getIp() {
await using dispatcher = new DisposableAgent({
connect: httpProxyConnector,
connections: 1
});
const ip = await request('https://api.ipify.org/', { dispatcher }).then(
resp => resp.body.text()
);
return { ip };
} // disposing: close socket connections openned with dispatcher (DisposableAgent)
/**
* get ip address with agent via httpProxyConnector
*/
async function getIpTryFinally() {
const dispatcher = new Agent({ connect: httpProxyConnector, connections: 1 });
try {
const ip = await request('https://api.ipify.org/', { dispatcher }).then(
resp => resp.body.text()
);
return { ip };
} finally {
await dispatcher.close();
}
}
from undici.
The approach you used indeed seems interesting, and I see the benefit of that; nevertheless, I'm not sure a rewrite of the ProxyAgent
will be an option here as the agent has a specific purpose and handles several other pieces beyond only connecting to the proxy.
It might be good to document this possibility, as I can see it can be overlooked easily; but not convinced about the rewrite.
About Symbol.asyncDispose
, it could be an interesting addition. Stills in stage 3
.
from undici.
We could implement ProxyAgent
using these connector?
from undici.
Yeah, definitely; if we can add a lightweight Proxy that is tight to a single origin, that might help to ease the possibility of having Proxy interceptor as well.
Just the idea of rewriting the current one completely its what I'm not 100% convinced of
from undici.
Related Issues (20)
- inconsistent setDate(0) behaviour between windows and linux HOT 1
- Nightly tests are failing HOT 6
- `UND_ERR_CONNECT_TIMEOUT` errors thrown when there is CPU intensive code on the event loop HOT 4
- Expose "Content-Encoding" handling publicly HOT 11
- Update automated release scripts to release from the v6.x branch
- Missing `6.19.4` tag/github release? HOT 1
- DELETED HOT 6
- `fetch` hangs indefinitely during second request to a certain webpage when using HTTP/2 HOT 4
- `undici.fetch` does not implement `body.dump()` as similar to `undici.request` (`Uncaught TypeError: response.body.dump is not a function`) HOT 1
- ERR_TLS_CERT_ALTNAME_INVALID error when using the proxy support (ProxyAgent) HOT 1
- react-scripts build is failing with TS1005 for balanced-pool.d.ts type HOT 5
- Can't use Undici with Brightdata proxy (error 407) HOT 1
- MockAgent not compatible with ProxyAgent,EnvHttpProxyAgent,RetryAgent HOT 1
- I do not receive set-cookie in response.headers.getSetCookie() HOT 5
- Missing bytes() mixin in response.body from request method HOT 1
- how to use maxRedirections in fetch api HOT 1
- WebSocket Data Transfer Slows Down After Node.js 16.14.2 Release
- code error HOT 1
- Nightly tests are failing HOT 2
- ProxyAgent ignore & skip & rewrite "connect" parameter HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from undici.