Giter Club home page Giter Club logo

Comments (10)

filsh avatar filsh commented on May 22, 2024 4

I used it
http://php.net/manual/en/function.gethostbyname.php

from http-client.

frankmayer avatar frankmayer commented on May 22, 2024 1

Hi there. Is there any solution planned for this? It bit me today (Using docker containers) 😄

from http-client.

steverhoades avatar steverhoades commented on May 22, 2024

@andig Can you please provide a test case for this? That will help us in replicating / resolving the issue.

from http-client.

andig avatar andig commented on May 22, 2024

Sure:

<?php
require_once '/vendor/autoload.php';

$loop = React\EventLoop\Factory::create();

$dnsResolverFactory = new React\Dns\Resolver\Factory();
$dnsResolver = $dnsResolverFactory->createCached('8.8.8.8', $loop);

$factory = new React\HttpClient\Factory();
$client = $factory->create($loop, $dnsResolver);

$request = $client->request('GET', 'http://localhost/');
$request->on('response', function ($response) {
    $response->on('data', function ($data) {
        // ...
    });
});
$request->on('error', function ($error, $response) {
    echo("Request error: $error\n");
});

$request->end();

$loop->run();

Gives (Windows):

Request error: exception 'React\Dns\RecordNotFoundException' with message 'DNS Request did not return valid answer.' in
C:\vendor\react\react\src\Dns\Resolver\Resolver.php:40Stack trace:
#0 C:\vendor\react\react\src\Dns\Resolver\Resolver.php(28): React\Dns\Resolver\Resolver->extractAddress(Object(React\Dns\Query\Query), Object(React\Dns\Model\Message))
#1 C:\vendor\react\promise\src\FulfilledPromise.php(24): React\Dns\Resolver\Resolver->React\Dns\Resolver\{closure}(Object(React\Dns\Model\Message))
#2 C:\vendor\react\promise\src\Promise.php(69): React\Promise\FulfilledPromise->then(Object(Closure), NULL)
#3 C:\vendor\react\promise\src\Promise.php(109): React\Promise\Promise->React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#4 C:\vendor\react\promise\src\Promise.php(83): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#5 C:\vendor\react\promise\src\Promise.php(122): React\Promise\Promise->resolve(Object(React\Dns\Model\Message))
#6 C:\vendor\react\promise\src\FulfilledPromise.php(24): React\Promise\Promise->React\Promise\{closure}(Object(React\Dns\Model\Message))
#7 C:\vendor\react\promise\src\Promise.php(70): React\Promise\FulfilledPromise->then(Object(Closure), Object(Closure), Object(Closure))
#8 C:\vendor\react\promise\src\Promise.php(109): React\Promise\Promise->React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#9 C:\vendor\react\promise\src\Promise.php(83): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#10 C:\vendor\react\promise\src\Promise.php(122): React\Promise\Promise->resolve(Object(React\Dns\Model\Message))
#11 [internal function]: React\Promise\Promise->React\Promise\{closure}(Object(React\Dns\Model\Message))
#12 C:\vendor\react\promise\src\Deferred.php(35): call_user_func(Object(Closure), Object(React\Dns\Model\Message))
#13 C:\vendor\react\promise\src\FulfilledPromise.php(24): React\Promise\Deferred->resolve(Object(React\Dns\Model\Message))
#14 C:\vendor\react\promise\src\Promise.php(69): React\Promise\FulfilledPromise->then(Array, Object(Closure))
#15 C:\vendor\react\promise\src\Promise.php(109): React\Promise\Promise->React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#16 C:\vendor\react\promise\src\Promise.php(83): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#17 C:\vendor\react\promise\src\Promise.php(122): React\Promise\Promise->resolve(Object(React\Dns\Model\Message))
#18 [internal function]: React\Promise\Promise->React\Promise\{closure}(Object(React\Dns\Model\Message))
#19 C:\vendor\react\promise\src\Deferred.php(35): call_user_func(Object(Closure), Object(React\Dns\Model\Message))
#20 C:\vendor\react\react\src\Dns\Query\Executor.php(88): React\Promise\Deferred->resolve(Object(React\Dns\Model\Message))
#21 [internal function]: React\Dns\Query\Executor->React\Dns\Query\{closure}('\xDB\xF1\x81\x83\x00\x01\x00\x00\x00\x01\x00\x00\tlo...', Object(React\Socket\Connection))
#22 C:\vendor\evenement\evenement\src\Evenement\EventEmitterTrait.php(64): call_user_func_array(Object(Closure), Array)
#23 C:\vendor\react\react\src\Socket\Connection.php(15): Evenement\EventEmitter->emit('data', Array)
#24 [internal function]: React\Socket\Connection->handleData(Resource id #53, Object(React\EventLoop\StreamSelectLoop))
#25 C:\vendor\react\react\src\EventLoop\StreamSelectLoop.php(227): call_user_func(Array, Resource id #53, Object(React\EventLoop\StreamSelectLoop))
#26 C:\vendor\react\react\src\EventLoop\StreamSelectLoop.php(201): React\EventLoop\StreamSelectLoop->waitForStreamActivity(4980999.9465942)
#27 C:\test.php(25): React\EventLoop\StreamSelectLoop->run()
#28 {main}
Next exception 'RuntimeException' with message 'An error occurred in the underlying stream' in C:\vendor\react\react\src\HttpClient\Request.php:162Stack trace:
#0 C:\vendor\react\promise\src\RejectedPromise.php(25): React\HttpClient\Request->handleError(Object(React\Dns\RecordNotFoundException))
#1 C:\vendor\react\promise\src\Promise.php(69): React\Promise\RejectedPromise->then(Object(Closure), Array)
#2 C:\vendor\react\promise\src\Promise.php(109): React\Promise\Promise->React\Promise\{closure}(Object(React\Promise\RejectedPromise))
#3 C:\vendor\react\promise\src\Promise.php(92): React\Promise\Promise->settle(Object(React\Promise\RejectedPromise))
#4 C:\vendor\react\promise\src\Promise.php(125): React\Promise\Promise->reject(Object(React\Dns\RecordNotFoundException))
#5 C:\vendor\react\promise\src\RejectedPromise.php(25): React\Promise\Promise->React\Promise\{closure}(Object(React\Dns\RecordNotFoundException))
#6 C:\vendor\react\promise\src\Promise.php(70): React\Promise\RejectedPromise->then(Object(Closure), Object(Closure), Object(Closure))
#7 C:\vendor\react\promise\src\Promise.php(109): React\Promise\Promise->React\Promise\{closure}(Object(React\Promise\RejectedPromise))
#8 C:\vendor\react\promise\src\Promise.php(92): React\Promise\Promise->settle(Object(React\Promise\RejectedPromise))
#9 C:\vendor\react\promise\src\Promise.php(125): React\Promise\Promise->reject(Object(React\Dns\RecordNotFoundException))
#10 C:\vendor\react\promise\src\RejectedPromise.php(25): React\Promise\Promise->React\Promise\{closure}(Object(React\Dns\RecordNotFoundException))
#11 C:\vendor\react\promise\src\Promise.php(70): React\Promise\RejectedPromise->then(Object(Closure), Object(Closure), Object(Closure))
#12 C:\vendor\react\promise\src\Promise.php(109): React\Promise\Promise->React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#13 C:\vendor\react\promise\src\Promise.php(83): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#14 C:\vendor\react\promise\src\Promise.php(122): React\Promise\Promise->resolve(Object(React\Dns\Model\Message))
#15 C:\vendor\react\promise\src\FulfilledPromise.php(24): React\Promise\Promise->React\Promise\{closure}(Object(React\Dns\Model\Message))
#16 C:\vendor\react\promise\src\Promise.php(70): React\Promise\FulfilledPromise->then(Object(Closure), Object(Closure), Object(Closure))
#17 C:\vendor\react\promise\src\Promise.php(109): React\Promise\Promise->React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#18 C:\vendor\react\promise\src\Promise.php(83): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#19 C:\vendor\react\promise\src\Promise.php(122): React\Promise\Promise->resolve(Object(React\Dns\Model\Message))
#20 [internal function]: React\Promise\Promise->React\Promise\{closure}(Object(React\Dns\Model\Message))
#21 C:\vendor\react\promise\src\Deferred.php(35): call_user_func(Object(Closure), Object(React\Dns\Model\Message))
#22 C:\vendor\react\promise\src\FulfilledPromise.php(24): React\Promise\Deferred->resolve(Object(React\Dns\Model\Message))
#23 C:\vendor\react\promise\src\Promise.php(69): React\Promise\FulfilledPromise->then(Array, Object(Closure))
#24 C:\vendor\react\promise\src\Promise.php(109): React\Promise\Promise->React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#25 C:\vendor\react\promise\src\Promise.php(83): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#26 C:\vendor\react\promise\src\Promise.php(122): React\Promise\Promise->resolve(Object(React\Dns\Model\Message))
#27 [internal function]: React\Promise\Promise->React\Promise\{closure}(Object(React\Dns\Model\Message))
#28 C:\vendor\react\promise\src\Deferred.php(35): call_user_func(Object(Closure), Object(React\Dns\Model\Message))
#29 C:\vendor\react\react\src\Dns\Query\Executor.php(88): React\Promise\Deferred->resolve(Object(React\Dns\Model\Message))
#30 [internal function]: React\Dns\Query\Executor->React\Dns\Query\{closure}('\xDB\xF1\x81\x83\x00\x01\x00\x00\x00\x01\x00\x00\tlo...', Object(React\Socket\Connection))
#31 C:\vendor\evenement\evenement\src\Evenement\EventEmitterTrait.php(64): call_user_func_array(Object(Closure), Array)
#32 C:\vendor\react\react\src\Socket\Connection.php(15): Evenement\EventEmitter->emit('data', Array)
#33 [internal function]: React\Socket\Connection->handleData(Resource id #53, Object(React\EventLoop\StreamSelectLoop))
#34 C:\vendor\react\react\src\EventLoop\StreamSelectLoop.php(227): call_user_func(Array, Resource id #53, Object(React\EventLoop\StreamSelectLoop))
#35 C:\vendor\react\react\src\EventLoop\StreamSelectLoop.php(201): React\EventLoop\StreamSelectLoop->waitForStreamActivity(4980999.9465942)
#36 C:\test.php(25): React\EventLoop\StreamSelectLoop->run()
#37 {main}

Either the DNSresolver should honor the hosts file or the client should not pass local requests to the DNS resolver- dunno which is better...

from http-client.

frankmayer avatar frankmayer commented on May 22, 2024

This is actually a bigger issue when working with linked containers in Docker.
Explanation:
In Docker, when a link is created from one container to the other, for example from a php container to a db or service container, then the (dynamic) ip & hostname for that target container is written into /etc/hosts, Since the DNS resolver does not honor /etc/hosts, the lookup fails. Somehow the hosts file (in any system) should be respected.

from http-client.

WyriHaximus avatar WyriHaximus commented on May 22, 2024

There is an issue about this on on the DNS component: reactphp/dns#10

Since I'm also working on the filesystem component we should look into using that to resolve this 👍 /cc @clue

from http-client.

frankmayer avatar frankmayer commented on May 22, 2024

BTW, I found a temporary workaround, for the docker problem, using "dnsmasq" and described it in my blog.

from http-client.

itcreator avatar itcreator commented on May 22, 2024

+1 for docker

from http-client.

clue avatar clue commented on May 22, 2024

Big +1 for getting this in, both for convenience ("localhost" etc.) and for Docker containers!

This depends on upstream components (see reactphp-legacy/socket-client#35 which in turn depends on reactphp/dns#10) and for now there's little we can do here.

from http-client.

SamMousa avatar SamMousa commented on May 22, 2024

One solution would be to implement a HostsExecutor and a FallthroughExecutor, combining these you would be able to have proper hosts file functionality, if you want it.

from http-client.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.