php - 如何强制 cURL 发送完整的 URL 作为请求目标?

标签 php url curl

如何强制 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。

最佳答案

据我所知,PHP cURL 包装器没有提供执行此操作的方法。

此外,即使您指定了不同的 header ,cURL 也会自动更改 Host header 。 例如:

curl -v --dump-header - -0 -H 'Host: my-domain.com' http://subdomain.my-domain.com/something.html

将忽略自定义 header 并发送:

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;

关于php - 如何强制 cURL 发送完整的 URL 作为请求目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23288217/

相关文章:

php - android从mysql数据库中获取图像列表

python - 如何从 Flask python 中的 URL 中删除参数

python - 我想抓取多个页面,但我得到了最后一个 url 的结果。为什么?

c++ - 使用 curl_easy_cleanup(curl) 时收到未处理的 NULL 异常

php - Ajax 中的安全性 : How to prevent cURL to post data?

php - Zend Framework 插件自动加载

javascript - PHP IF 语句有 2 个条件

php - SQLite 选择最近 24 小时的记录

带有查询字符串的Android webview url请求

curl - 如何在 Golang 中制作 Curl Store Cookie?