Comments (10)
I used it
http://php.net/manual/en/function.gethostbyname.php
from http-client.
Hi there. Is there any solution planned for this? It bit me today (Using docker containers) 😄
from http-client.
@andig Can you please provide a test case for this? That will help us in replicating / resolving the issue.
from http-client.
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.
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.
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.
BTW, I found a temporary workaround, for the docker problem, using "dnsmasq" and described it in my blog.
from http-client.
+1 for docker
from http-client.
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.
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)
- Time Out Question HOT 1
- question regarding writing HOT 2
- Hanging connector HOT 1
- Unable to validate "1 " as chunk length header HOT 3
- strtolower() expects parameter 1 to be string, array given HOT 1
- Delay Request Connection HOT 6
- Error on "close" event HOT 8
- How to get the full response body? HOT 1
- [bug]Concurrent with more than 1000 requests. HOT 4
- client pool HOT 1
- Memory leak in SecureConnector HOT 4
- Integrate Server Sent event api (EventSource) or streaming HTTP api HOT 1
- Support detecting response body boundaries HOT 1
- Can this library be used in php-fpm mode? HOT 2
- Trying to POST multipart/form-data HOT 2
- Support for certificate authentication when using HttpClientAdapter HOT 1
- Stop streaming half-way. HOT 1
- Support HTTP upgrades (WebSocket etc.) HOT 1
- is $loop->run(); blocking? HOT 4
- Heads up! Development focus on react/http
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 http-client.