vibe.d http client
Arjan
arjan at ask.me.to
Mon Feb 2 17:46:58 UTC 2026
On Monday, 2 February 2026 at 16:47:52 UTC, Lars Johansson wrote:
> hi all,
> this is driving me nuts.
>
> My client code:
> I call the server once for each node in the array endpoints.
> but the result (see below) is three calls with the last element
> (/times)
> i have tried a zillion times in vain, they all ends with three
> (/times) call.
> the only way i can get this right is by break out the calling
> logic to a function like
> void spawnRequest(string ep){...} and thus creating a copy per
> call I suppose.
> Two things:
> It works but, it is a clumsy solution.
> And I'm not really sure why it goes wrong.
> i would appreciate if someone can show me a clean solution
> without a 'technical' function. and why my solution goes wrong
>
>
> import vibe.vibe;
> import std.stdio : writefln;
> import std.stdio : writeln;
>
> void main(){
> string[] endpoints = ["/", "/hello/VibeClient",
> "/time"];
> foreach (endpoint; endpoints) {
> writeln("start ",endpoint);
> auto ep = endpoint;
> runTask(() nothrow @safe {
> try {
> auto response =
> requestHTTP("http://127.0.0.1:8080" ~ ep);
> auto body =
> response.bodyReader.readAllUTF8();
> () @trusted {
> writefln("[%s] Response: %s", ep, body);
> }();
> }
> catch (Exception e) {
> try
> {
> () @trusted {
> writefln("[%s] Error: %s", ep,
> e.msg);
> }();
> }
> catch (Exception) {}
> }
> });
> }
> runApplication();
> }
>
> result:
> PS C:\Users\Lasse\DUB\nwclient01> ./nwclient01.exe
> start /
> start /hello/VibeClient
> start /time
> [/time] Response: Current time: 2026-02-02T17:28:07.6319941
> [/time] Response: Current time: 2026-02-02T17:28:07.632999
> [/time] Response: Current time: 2026-02-02T17:28:07.632999
Use:
```d
runTask(() nothrow @safe {...}, ep );
```
see https://vibed.org/api/vibe.core.core/runTask
More information about the Digitalmars-d-learn
mailing list