Bug #74135 [Opn]: CURLOPT_RESOLVE don't work properly in second time curl call

From: Date: Mon, 20 Feb 2017 16:13:26 +0000
Subject: Bug #74135 [Opn]: CURLOPT_RESOLVE don't work properly in second time curl call
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-207471@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=74135&edit=1

 ID:                 74135
 User updated by:    icez at icez dot net
 Reported by:        icez at icez dot net
 Summary:            CURLOPT_RESOLVE don't work properly in second time
                     curl call
 Status:             Open
 Type:               Bug
 Package:            cURL related
 Operating System:   Linux Debian Jessie
 PHP Version:        7.0.16
 Block user comment: N
 Private report:     N

 New Comment:

sorry, missing one line in the test script:

Here's the correct one:
-------------------

$servers = [ '192.0.2.1', '192.0.2.2', '192.0.2.3' ];

foreach ($servers as $server) {

$resolveparam = [ 'example.com:443:'.$server ];

$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_RESOLVE, $resolveparam);
curl_setopt($ch, CURLOPT_URL, "https://example.com/some/path");
curl_setopt($ch, CURLOPT_VERBOSE, 1);

$result = curl_exec($ch);
$info = curl_getinfo($ch);

echo $info['primary_ip']."\n";
curl_close($ch);
}


Previous Comments:
------------------------------------------------------------------------
[2017-02-20 16:10:42] icez at icez dot net

Description:
------------
I have the code that call several servers behind the load balancer to check for the page load
result. The server was configured with SSL so I need the way to force curl to connect to specific IP
address with the correct hostname without having to set SSL_VERIFYHOST to false and found curl
option CURLOPT_RESOLVE. I've tested that curl command line can use this option to force connect
to specific server IP address, but when I run the test script in PHP it always connect to first
server. which is the first address to have this option set to.

related question: http://stackoverflow.com/questions/36434049/php-curl-curlopt-resolve-not-working

Test script:
---------------
$servers = [ '192.0.2.1', '192.0.2.2', '192.0.2.3' ];

foreach ($servers as $server) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_RESOLVE, $resolveparam);
curl_setopt($ch, CURLOPT_URL, "https://example.com/some/path");
curl_setopt($ch, CURLOPT_VERBOSE, 1);

$result = curl_exec($ch);
$info = curl_getinfo($ch);

echo $info['primary_ip']."\n";
curl_close($ch);
}


Expected result:
----------------
192.0.2.1
192.0.2.2
192.0.2.3

Actual result:
--------------
192.0.2.1
192.0.2.1
192.0.2.1


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=74135&edit=1


Thread (5 messages)

« previous php.bugs (#207471) next »