如何强制curl在HTTP GET请求中包含完整的URL?
卷曲发送(不工作):
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。
答案 0 :(得分:2)
就我所知,PHP cURL包装器没有公开这样做的方法。
此外,即使您指定了另一个标头,cURL也会自动更改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: */*
你可以做的是build the request manually:
$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;
答案 1 :(得分:2)
至少从命令行,如果将curl配置为对请求使用HTTP代理,则curl会发送绝对URI。即使您没有使用代理,也可以指定它使用实际服务器作为代理服务器,然后您的服务器将在请求中接收绝对URI。
答案 2 :(得分:0)
curl
始终充当正确的HTTP客户端。请求目标(即GET后面的内容)的standard requires只包含绝对路径和可选的查询。
因此无法使curl
将绝对URL作为请求目标发送到源服务器。