这似乎很简单,但很多时间都无处可去..
如果我提出请求
`myfile.php?url=https://rr3---sn-nx57ynlk.googlevideo.com/videoplayback?expire=1678087801&ei=GUIFZM_dMJWWkgbeo624BQ&ip=2605%3A6ac0%3A4008%3A0%3A216%3A3eff%3Afee2%3Ad40c&id=o-AJKZ8ynIJb6xJfKO5dQJIEYKx4PxT5akBgSjgF6tWNTC&itag=22&source=youtube&requiressl=yes&mh=8d&mm=31%2C26&mn=sn-nx57ynlk%2Csn-qxo7rn7r&ms=au%2Conr&mv=u&mvi=3&pl=36&spc=H3gIhjqQk_5oc7JioOMvEblTyLG63sY&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=206.100&lmt=1654632374754034&mt=1678065861&fvip=5&fexp=24007246&c=ANDROID&txp=5311224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAI9apcV9d5qmhxRlhuyVGWMh-6M_z89zjpaarJ1lEsACAiEAkRpLI4u-5CIppR9sO5Os1JDQuz_HoR4p85Typ4GrKBI%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AG3C_xAwRQIhAIYOSMamSYCVOlReQMj90WQoByNoONThODa5TzT8U1XPAiB2p0dxv4xOcDQhzFqHrZ-uQLhavG41kFcGlruPQnaJCQ%3D%3D`
`403 forbidden`
echo $url;
echo $url2;
两者都返回完全相同的 url。
$url = $_GET['url'];
$url = html_entity_decode($url, ENT_QUOTES | ENT_XML1, 'UTF-8');
$url2 = 'https://rr3---sn-nx57ynlk.googlevideo.com/videoplayback?expire=1678087801&ei=GUIFZM_dMJWWkgbeo624BQ&ip=2605%3A6ac0%3A4008%3A0%3A216%3A3eff%3Afee2%3Ad40c&id=o-AJKZ8ynIJb6xJfKO5dQJIEYKx4PxT5akBgSjgF6tWNTC&itag=22&source=youtube&requiressl=yes&mh=8d&mm=31%2C26&mn=sn-nx57ynlk%2Csn-qxo7rn7r&ms=au%2Conr&mv=u&mvi=3&pl=36&spc=H3gIhjqQk_5oc7JioOMvEblTyLG63sY&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=206.100&lmt=1654632374754034&mt=1678065861&fvip=5&fexp=24007246&c=ANDROID&txp=5311224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAI9apcV9d5qmhxRlhuyVGWMh-6M_z89zjpaarJ1lEsACAiEAkRpLI4u-5CIppR9sO5Os1JDQuz_HoR4p85Typ4GrKBI%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AG3C_xAwRQIhAIYOSMamSYCVOlReQMj90WQoByNoONThODa5TzT8U1XPAiB2p0dxv4xOcDQhzFqHrZ-uQLhavG41kFcGlruPQnaJCQ%3D%3D';
#echo $url; returns the same as $url2
#echo $url2; returns the same as $url
function play($url){
ini_set('memory_limit', '1024M');
set_time_limit(3600);
ob_start();
if (isset($_SERVER['HTTP_RANGE'])) $opts['http']['header'] = "Range: " . $_SERVER['HTTP_RANGE'];
$opts['http']['method'] = "HEAD";
$conh = stream_context_create($opts);
$opts['http']['method'] = "GET";
$cong = stream_context_create($opts);
$out[] = file_get_contents($url, false, $conh);
$out[] = $httap_response_header;
ob_end_clean();
array_map("header", $http_response_header);
readfile($url, false, $cong);
}
play($url); //does not work
play($url2); //works
但是为什么?
$url = html_entity_decode($url, ENT_QUOTES | ENT_XML1, 'UTF-8');
$url2 = 'https://rr3---sn-nx57ynlk.googlevideo.com/videoplayback?expire=1678087801&ei=GUIFZM_dMJWWkgbeo624BQ&ip=2605%3A6ac0%3A4008%3A0%3A216%3A3eff%3Afee2%3Ad40c&id=o-AJKZ8ynIJb6xJfKO5dQJIEYKx4PxT5akBgSjgF6tWNTC&itag=22&source=youtube&requiressl=yes&mh=8d&mm=31%2C26&mn=sn-nx57ynlk%2Csn-qxo7rn7r&ms=au%2Conr&mv=u&mvi=3&pl=36&spc=H3gIhjqQk_5oc7JioOMvEblTyLG63sY&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=206.100&lmt=1654632374754034&mt=1678065861&fvip=5&fexp=24007246&c=ANDROID&txp=5311224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAI9apcV9d5qmhxRlhuyVGWMh-6M_z89zjpaarJ1lEsACAiEAkRpLI4u-5CIppR9sO5Os1JDQuz_HoR4p85Typ4GrKBI%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AG3C_xAwRQIhAIYOSMamSYCVOlReQMj90WQoByNoONThODa5TzT8U1XPAiB2p0dxv4xOcDQhzFqHrZ-uQLhavG41kFcGlruPQnaJCQ%3D%3D';
print $url;
print $url2;
期望的结果: 正确返回 $url。 谢谢你。