ProxymanApp / Proxyman

Modern. Native. Delightful Web Debugging Proxy for macOS, iOS, and Android ⚑️
https://proxyman.io
5.64k stars 187 forks source link

Throttling Support #119

Open fishcharlie opened 5 years ago

fishcharlie commented 5 years ago

It'd be awesome to see support for throttling requests/responses. Where you can simulate different network conditions (bad signal, slow speeds, etc).

NghiaTranUIT commented 5 years ago

Thank for this request @fishcharlie , we will consider to implement this feature in this years.

For now, you can use the combination of Proxyman and Network Link Conditioner (Apple tool) to throttle the network πŸ‘ It's one of preferred tool to do it during my development πŸ˜„

abeazam commented 4 years ago

This is not just a functional app but a gorgeous app too. The only thing stopping me from switching from Charles is Throttling. If you can some how get it in sprint that would be amazing .

NghiaTranUIT commented 4 years ago

Hi @abeazam, sorry for the delay because I was too busy to implement other high priority features during the journey. I actually did implement but the result was not great and didn't fulfill my expectation.

I would suggest using Network Conditioner to stimulate poor networks.

If you're using Map Local with delay, I would support it soon because it's eaiser https://github.com/ProxymanApp/Proxyman/issues/510

cameroncooke commented 3 years ago

Does Network Link Conditioner allow you to be selective about which domains to throttle like Charles does? Throttling entire machine is problematic when needing to test specific scenarios so I would +1 that Proxyman should do this as Charles does perfectly well.

NghiaTranUIT commented 3 years ago

@cameroncooke it's system-wide, not a particular domain. I've recently received a lot of requests for this feature. I will work on it after the iOS Proxyman and Rule Folder (https://github.com/ProxymanApp/Proxyman/issues/739) πŸ‘

harkairt commented 3 years ago

The only thing stopping me from switching from Charles is Throttling.

I share this :) really like the app, but missing throttling is a bummer

NghiaTranUIT commented 3 years ago

Sorry to hear that. Just wondering if you’re going to use Throttle for particular domains or all domains? And which profile you would use (3G, 4G, poor wift, etc)?

cameroncooke commented 3 years ago

I get the impression this is hard to pull off. Even Charles has some bugs when using throttling, I've had throttling turned on and it just stop working for example.

But when it works it's probably Charles's strongest feature and so useful for helping finding race conditions in apps especially when targeting just some domains.

NghiaTranUIT commented 3 years ago

Thanks. I'm researching about the Token Bucket, which is possible to implement the bandwidth limit (like Throttle does) πŸ‘ I understand this feature is essential and Proxyman should support it πŸ˜„

cameroncooke commented 3 years ago

So for me at the moment I'm using a combination of Proxyman and Charles. Though I do tend to keep falling back a Charles when I need throttling. But my ambition is to move completely to Proxyman as it's actively developed. Throttling is only thing holding me back.

NghiaTranUIT commented 3 years ago

Sure, I'm implementing it now, and I'm sorry for the delay since 2019 because there are many features need to be done.

NghiaTranUIT commented 3 years ago

I would like to update the progress of the Network Throttling feature

Basically, we can set Network Conditions for system wide or particular domains πŸŽ‰

We support various preset profile as well πŸ‘

It's 80%, and we're going to release it in the next releases πŸ˜„

Screen Shot 2021-03-03 at 20 21 01 Screen Shot 2021-03-03 at 20 20 58 Screen Shot 2021-03-03 at 20 20 51
cameroncooke commented 3 years ago

Amazing, happy to beta test when a build is available as we use this a lot in Charles esp. domain-specific throttling.

Cameron.

On Wed, 3 Mar 2021 at 13:31, Nghia Tran notifications@github.com wrote:

I would like to update the progress of the Network Throttling feature

Basically, we can set Network Conditions for system wide or particular domains πŸŽ‰

We support various preset profile as well πŸ‘

It's 80%, and we're going to release it in the next releases πŸ˜„

[image: Screen Shot 2021-03-03 at 20 21 01] https://user-images.githubusercontent.com/5878421/109811986-1241bc00-7c5e-11eb-90d2-ca343fb44411.png

[image: Screen Shot 2021-03-03 at 20 20 58] https://user-images.githubusercontent.com/5878421/109811991-1372e900-7c5e-11eb-997b-e4e8d4486ed7.png

[image: Screen Shot 2021-03-03 at 20 20 51] https://user-images.githubusercontent.com/5878421/109811969-0e159e80-7c5e-11eb-8b1f-b9ad6be32fab.png

β€” You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/ProxymanApp/Proxyman/issues/119#issuecomment-789715568, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAEZ6SKJRMVWWBFF2IUW4P3TBY24BANCNFSM4HGQLO4Q .

michaelhogg commented 3 years ago

Awesome news! :star_struck: Thank you so much @NghiaTranUIT! :tada:

NghiaTranUIT commented 3 years ago

Hey @michaelhogg @cameroncooke, let check out the v1 of Network Condition in the latest build (2.20.0). You can directly update from the app πŸ‘

Changelog at: https://github.com/ProxymanApp/Proxyman/releases/tag/2.20.0

In this build, we're able to select the preset profiles, but not customize them. I will improve it in the v2 πŸ˜„

michaelhogg commented 3 years ago

@NghiaTranUIT: I'm now using Proxyman v2.21.1, and the Network Conditions v1 functionality is looking great! :heart: Thank you for implementing this :smiley: Looking forward to v2 with the ability to customise the profiles! :tada:

I have a question about the Apply System-wide: All traffic in your machine will be affected by Network Throttling checkbox. When checked, does this operate in the same way as Apple's Network Link Conditioner (which is a GUI for the dnctl and pfctl command-line tools), applying the network conditions to the whole of macOS (even to network traffic which is not being proxied through Proxyman) ?

I've tried creating a rule with this Apply System-wide checkbox enabled, and using the 2G (EDGE) preset profile (which is a very slow preset), but it seems that it only affects the network traffic which is being proxied through Proxyman. If this is the intended behaviour (which I expect it is), then maybe the checkbox could be renamed to something like: Apply to all hosts: All traffic being proxied through Proxyman will be affected by Network Throttling ?

NghiaTranUIT commented 3 years ago

When checked, does this operate in the same way as Apple's Network Link Conditioner (which is a GUI for the dnctl and pfctl command-line tools), applying the network conditions to the whole of macOS (even to network traffic which is not being proxied through Proxyman) ?

It only affects traffic, which is being proxied to Proxyman app.

then maybe the checkbox could be renamed to something like: Apply to all hosts: All traffic being proxied through Proxyman will be affected by Network Throttling ?

Ah nice idea, I will improve the wording to make it clear πŸ˜„

sewar commented 3 years ago

Great feature! I have a few notes:

NghiaTranUIT commented 3 years ago

Thanks for your suggestion. I'm going to improve/fix it in the next release πŸ˜„

alextesttesttest commented 3 years ago

It would be great to be able to create custom throttling profiles, or at least have more presets to choose from.

I'd like to see presets for really poor 2G/3G where bandwidth is ~5 kbps and packet loss around 10%.

I'm also not seeing @sewar 's proposal to show requests with the 100% Loss profile, which would be really good to have to confirm client behaviour.

NghiaTranUIT commented 3 years ago

Thanks for the request @alextesttesttest. I totally agree that we should be able to customize our own network profile πŸ‘ I will put this feature in high priority queue πŸ‘

vrnvorona commented 3 years ago

What about making own profiles? I love just making long delay like, several seconds without packet lost to test how apps will behave when a lot of requests are delayed. Setting 100% packet lost is not as good, because it may interfere with connectivity checks and force no connection state, instead of just waiting for response.

NghiaTranUIT commented 3 years ago

@vrnvorona how about selecting the "Very Bad Network" Profile πŸ€” The bandwidth is <1mbps and delay ~=10-20s

vrnvorona commented 3 years ago

Well I assumed it's not 10-20s from tooltip. If it is, it's too big this way. Well, at least ability to control it is nice imo. image

sergej-s commented 2 years ago

Hi! How is it going with custom network profiles? I've just installed Proxyman and it's a quite nice tool but I need to check very very bad connections like delay of 5-10 secs and loss like 30%.

PS. Network Link Conditioner doesn't work at all on Monterey :(

NghiaTranUIT commented 2 years ago

Sorry, but no progress so far on the Customize Profile @sergej-s : /

I see that somebody can run Network Link Conditioner on Monterey https://developer.apple.com/forums/thread/690358?answerId=693458022#693458022

sergej-s commented 2 years ago

Many thanks for quick reply! Sad but I hope you will manage to make it at some day :) I've tried v12, didn't work out. It seems the root access is needed to make it work.

leepowelldev commented 2 years ago

Long term Charles user, recently discovered Proxyman - really liking it, but I'm not sure it's fully featured enough for me to leave Charles completely yet. For some reason "Very bad network" doesn't seem to really make any difference for localhost requests (even though I can see the requests in proxyman) - still ~30ms response times, yet Charles doesn't have the issue and works as expected.

I really hope Proxyman can match (or better) the throttling offerings from Charles as I think this is an awesome app.

NghiaTranUIT commented 2 years ago

Just wondering @leepowelldev: When you call localhost, do you see the localhost traffic on the Proxyman app?

I assume that you'd visit localhost, and by default, it doesn't go through Proxyman Server. Thus, it's not throttled.

To fix it, you might access your localhost via the alias name, which you define in etc/hosts. Read more at https://docs.proxyman.io/troubleshooting/couldnt-see-any-request-from-localhost-server#3.-solutions

Please let me know the result πŸ‘

leepowelldev commented 2 years ago

Hi @NghiaTranUIT πŸ‘‹

Yes I see the traffic, as I'm explicitly directing my requests at the proxy. This is a Node app which makes a request to another Node app (an api) and I'm using a standard Node request. I have tried both solutions from your FAQ's and sadly neither seemed to work for me.

EDIT: Upon closer inspection, it does seem to make a small difference. Without throttling responses are around 15ms, with a bad network connection they're around 30ms. Maybe I'm just used to Charles where I can manually add additional latency and server stability.

NghiaTranUIT commented 2 years ago

@leepowelldev let's use this Beta build: https://proxyman.s3.us-east-2.amazonaws.com/beta/Proxyman_3.5.0_Add_more_delay_time_to_Network_Condition.dmg

I add more delay to the "Very Bad Network", "2G" and "3G" profiles. You can see the significant delay in the screenshot. If you test with Web Browser, make sure you enable the No Caching tool, otherwise, the browser will use the cache πŸ‘

Screenshots

Proxyman Network Throttle
sanderdekoning commented 1 year ago

@NghiaTranUIT Why is the limitation still here that only one rule can be activated at once? I want to also have a rule either on a per-app basis, or multiple rules at the same time as the app I mentioned uses more than one domain, and wildcard/RegEx aren't supported either. Meaning that currently it is impossible to have Network Conditions enabled for the whole app

NghiaTranUIT commented 1 year ago

Sorry for the limitation of the Network Throttling @sanderdekoning. I would admit that it was really hard to implement network throttling per app, per domain, or using the wildcard since the core is built on top of Swift NIO.

Thus, we only support 1 domain or an entire mac at once.


Our team will soon implement the v2, which supports the new requirement πŸ‘

sushant-here commented 1 year ago

I also would like to be able to throttle multiple domains at a time. Any ETA on when v2 of network throttling is coming?

dacarver commented 10 months ago

Would also love to see throttling on a per-app basis.