Skip to content

curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_2_0) does not honored when the CURLOPT_PROXY is combined #22002

@ghost

Description

Description

The following code:

<?php
set_time_limit(100);
function test1(){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'https://ftp.mozilla.org/');
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_2_0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch,CURLOPT_HTTPPROXYTUNNEL,true);
curl_setopt($ch,CURLOPT_PROXY,'127.0.0.1:8888');// SOCKS5H
curl_setopt($ch,CURLOPT_PROXYTYPE,CURLPROXY_SOCKS5_HOSTNAME);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query(['test'=>1]));
curl_setopt($ch,CURLOPT_HTTPHEADER,['Content-Type: application/x-www-form-urlencoded']);
curl_setopt($ch,CURLOPT_VERBOSE,true);
return curl_exec($ch);
}
function test2(){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'https://ftp.mozilla.org/');
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_2_0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HEADER,false);
// no proxy
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query(['test'=>1]));
curl_setopt($ch,CURLOPT_HTTPHEADER,['Content-Type: application/x-www-form-urlencoded']);
curl_setopt($ch,CURLOPT_VERBOSE,true);
return curl_exec($ch);
}
var_dump(test1());
var_dump(test2());

Resulted in this output:

*   Trying 127.0.0.1:8888...
* SOCKS5 connect to ftp.mozilla.org:443 (remotely resolved)
* SOCKS5 request granted.
* Connected to 127.0.0.1 () port 8888
* using HTTP/1.x
* ALPN: curl offers h2,http/1.1
* ALPN: server accepted h2
* Server certificate:
...
* Connected to 127.0.0.1 (127.0.0.1) port 8888
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://ftp.mozilla.org/
...
> POST / HTTP/2
...
< HTTP/2 405

* Host ftp.mozilla.org:443 was resolved.
* ALPN: curl offers h2,http/1.1
* ALPN: server accepted h2
* Server certificate:
...
* Connected to ftp.mozilla.org () port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://ftp.mozilla.org/
...
> POST / HTTP/2
...
< HTTP/2 405

But I expected:

  • No * using HTTP/1.x in SOCKSified request; it should use HTTP2 from the beginning, just like without-proxy result

PHP Version

PHP 8.4.16 (cli)

Operating System

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions