Skip to content

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

@licaonkter

Description

@licaonkter

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions