如何强制curl在HTTP GET请求中包含完整的URL?curl 发送(不工作):
GET /some/path HTTP/1.1 Host: my-domain-here.com ...
我希望它是(工作):
GET http://my-domain-here.com/some/path HTTP/1.1 Host: i2.wp.com
所以我希望主机总是包含在GET行中。我如何使用CURL/PHP来实现这一点呢?服务器只能处理绝对URL。
jfewjypa1#
据我所知,PHP cURL Package 器并没有公开这样做的方法。此外,cURL会自动变更Host信头,即使您指定了不同的信头。例如:
Host
curl -v --dump-header - -0 -H 'Host: my-domain.com' http://subdomain.my-domain.com/something.html
将忽略自定义标头并发送以下内容:
GET /something.html HTTP/1.0 User-Agent: curl/7.35.0 Host: subdomain.my-domain.com Accept: */*
您可以手动构建请求:
$host = 'my-domain.com'; $path = 'http://subdomain.my-domain.com/something.html'; $fp = fsockopen($host, 80); fputs($fp, "GET $path HTTP/1.1\r\n"); fputs($fp, "Host: $host\r\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: 0\r\n"); fputs($fp, "Connection: close\r\n\r\n"); $result = ''; while(!feof($fp)) { $result .= fgets($fp, 128); } fclose($fp); echo $result;
s4chpxco2#
至少在命令行中,如果配置curl使用HTTP代理来处理请求,curl确实会发送绝对URI。即使没有使用代理,也可以指定它使用实际的服务器作为代理服务器,这样服务器就会收到请求中的绝对URI。
vc6uscn93#
curl始终充当正确的HTTP客户端。该标准要求请求目标(即GET之后的内容)仅由绝对路径和可选的查询组成。因此,不可能使curl将作为请求目标的绝对URL发送到源服务器。
curl
13z8s7eq4#
--request-target
以下命令将
127.0.0.1
GET http://request.host.name/path/ HTTP/1.1
Host: host.header
第一个
4条答案
按热度按时间jfewjypa1#
据我所知,PHP cURL Package 器并没有公开这样做的方法。
此外,cURL会自动变更
Host
信头,即使您指定了不同的信头。例如:将忽略自定义标头并发送以下内容:
您可以手动构建请求:
s4chpxco2#
至少在命令行中,如果配置curl使用HTTP代理来处理请求,curl确实会发送绝对URI。即使没有使用代理,也可以指定它使用实际的服务器作为代理服务器,这样服务器就会收到请求中的绝对URI。
vc6uscn93#
curl
始终充当正确的HTTP客户端。该标准要求请求目标(即GET之后的内容)仅由绝对路径和可选的查询组成。因此,不可能使
curl
将作为请求目标的绝对URL发送到源服务器。13z8s7eq4#
curl
有--request-target
选项以下命令将
127.0.0.1
GET http://request.host.name/path/ HTTP/1.1
形式发送请求路径Host
标头设置为Host: host.header
第一个