php - 如何从某些 URL 获取 HTTP header (位置)?

标签 php http curl

我有一些地址(例如:我必须通过 curl 传递的 http://example.com/b-out/3456/3212/).This 地址。我知道这个 URL 重定向到另一个 URL(比如 http://sdss.co/go/36a7fe71189fec14c85636f33501f6d2/?.. 。)。这个另一个 URL 位于第一个 URL 的标题(位置)中。如何我可以在某个变量中获取第二个 URL 吗?

最佳答案

对第一个 URL 执行请求,确认发生重定向并读取 Location header 。来自 PHP cURL retrieving response headers AND body in a single request?Check headers in PHP cURL server response :

$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL, $url);
curl_setopt($curlHandle, CURLOPT_HEADER, 1);
curl_setopt($curlHandle, CURLOPT_NOBODY, 1);
curl_setopt($curlHandle, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);

$redirectResponse = curl_exec($curlHandle);

那里设置的选项意味着:返回响应头,不返回响应主体,自动跟随重定向并在 exec 调用中返回结果。

现在您已经在 $redirectResponse 中获得了没有正文的 HTTP 响应 header 。您现在需要验证它是否是重定向:

$statusCode = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);
if ($statusCode == 301 || $statusCode == 302 || $statusCode == 303)
{
    $headerLength = curl_getinfo($curlHandle, CURLINFO_HEADER_SIZE);
    $responseHeaders = substr($redirectResponse, 0, $headerLength);
    $redirectUrl = getLocationHeader($responseHeaders);
}

然后创建一个函数来执行此操作:

function getLocationHeader($responseHeaders)
{

}

在那里,您需要 explode() HTTP 换行符 (\r\n) 上的 $responseHeaders 并找到 header 从 location 开始。


或者,您可以使用更抽象的 HTTP 客户端库 like Zend_Http_Client , 在那里获取标题更容易一些。

关于php - 如何从某些 URL 获取 HTTP header (位置)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25864042/

相关文章:

php - Paypal 沙盒 CURL 执行 - "SSL connect error "

javascript - 来自同一类动态列表的函数

javascript - 将数组值从 php 复制到 javascript

php - 删除不在数组中的数据库条目

javascript - window.location.reload 在各种设备和浏览器上随机工作

php - 从主机访问 docker 回答 curl : (56) Recv failure: Connection reset by peer

python - 当没有文件重定向 url django 时,我的本地端口位于 127.0.0.1 :8000 always redirects to 127. 0.0.1:8000/myapp/lists

多个站点之间的 HTTP session

java - 如何将字符串数组作为基本名称值对作为 HTTPPOST 发送?

php - cURL 不支持的 SSL 协议(protocol)