在 PHP / cURL 中等待救援重定向 url
Waiting to rescue redirect url in PHP / cURL
我需要从 link 检索重定向 URL,但是当我提取 header 信息时,它只是 returns:
Locations: redirecting...
之后,页面被重定向到URL我要兑换的页面。
我正在使用代码:
$url = 'http://168.0.51.253:8000/boleto/74140-P2UTT5T4IH/';
// Final URL I want to retrieve = https://data.galaxpay.com.br/prooverisp/boleto/202109YB0K77L7WYP5PPY0NGT6DMKOD01155936
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$a = curl_exec($ch);
curl_close($ch);
$headers = explode("\n", $a);
$j = count($headers);
$ticket = null;
for ($i = 0; $i < $j; $i++) {
if (strpos($headers[$i], "Location:") !== false) {
$ticket = trim(str_replace("Location:", "", $headers[$i]));
break;
}
}
var_dump($headers);
如何等待重定向并检索最终的 URL?我和 PHP.
一起工作
您正在尝试从第一个 link 获取重定向(又名位置)header,但是当您在浏览器中禁用 JavaScript 的情况下打开它时,您会看到是 none。事实上,你总是得到一个响应代码 200 而没有 Location header.
实际上有一个 javascript 可以立即将您重定向到目标 URL:
<!doctype html>
<style type="text/css" media="all">
html, body {
height: 100%;
margin: 0; /* Reset default margin on the body element */
}
iframe {
display: block; /* iframes are inline by default */
border: none; /* Reset default border */
width: 100%;
height: 100%;
}
</style>
Redirecionando...
<script type="text/javascript">
document.location.href = "XYZ"
</script>
XYZ=目标link你要抢,出于隐私原因,我只是在这里删除它。
你可以这样抢:
$url = 'http://1.2.3.4:8000/foo/bar/'; // URL removed for privacy
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$a = curl_exec($ch);
curl_close($ch);
$lines = explode("\n", $a);
$j = count($lines);
$ticket = null;
for ($i = 0; $i < $j; $i++) {
if (preg_match('/document.location.href = \"(.*)\"/', $lines[$i], $matches)) {
$ticket = trim($matches[1]);
break;
}
}
var_dump($ticket);
此外,您的数组循环无缘无故地有点复杂,因此您可以使用 foreach:
来简化它
$ticket = null;
foreach (explode("\n", $a) as $line) {
if (preg_match('/document.location.href = \"(.*)\"/', $line, $matches)) {
$ticket = trim($matches[1]);
break;
}
}
我需要从 link 检索重定向 URL,但是当我提取 header 信息时,它只是 returns:
Locations: redirecting...
之后,页面被重定向到URL我要兑换的页面。 我正在使用代码:
$url = 'http://168.0.51.253:8000/boleto/74140-P2UTT5T4IH/';
// Final URL I want to retrieve = https://data.galaxpay.com.br/prooverisp/boleto/202109YB0K77L7WYP5PPY0NGT6DMKOD01155936
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$a = curl_exec($ch);
curl_close($ch);
$headers = explode("\n", $a);
$j = count($headers);
$ticket = null;
for ($i = 0; $i < $j; $i++) {
if (strpos($headers[$i], "Location:") !== false) {
$ticket = trim(str_replace("Location:", "", $headers[$i]));
break;
}
}
var_dump($headers);
如何等待重定向并检索最终的 URL?我和 PHP.
一起工作您正在尝试从第一个 link 获取重定向(又名位置)header,但是当您在浏览器中禁用 JavaScript 的情况下打开它时,您会看到是 none。事实上,你总是得到一个响应代码 200 而没有 Location header.
实际上有一个 javascript 可以立即将您重定向到目标 URL:
<!doctype html>
<style type="text/css" media="all">
html, body {
height: 100%;
margin: 0; /* Reset default margin on the body element */
}
iframe {
display: block; /* iframes are inline by default */
border: none; /* Reset default border */
width: 100%;
height: 100%;
}
</style>
Redirecionando...
<script type="text/javascript">
document.location.href = "XYZ"
</script>
XYZ=目标link你要抢,出于隐私原因,我只是在这里删除它。
你可以这样抢:
$url = 'http://1.2.3.4:8000/foo/bar/'; // URL removed for privacy
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$a = curl_exec($ch);
curl_close($ch);
$lines = explode("\n", $a);
$j = count($lines);
$ticket = null;
for ($i = 0; $i < $j; $i++) {
if (preg_match('/document.location.href = \"(.*)\"/', $lines[$i], $matches)) {
$ticket = trim($matches[1]);
break;
}
}
var_dump($ticket);
此外,您的数组循环无缘无故地有点复杂,因此您可以使用 foreach:
来简化它$ticket = null;
foreach (explode("\n", $a) as $line) {
if (preg_match('/document.location.href = \"(.*)\"/', $line, $matches)) {
$ticket = trim($matches[1]);
break;
}
}