Home > Article > Backend Development > Use PHP to forge referer to break through the code of network disk prohibiting external connections_PHP tutorial
For example, I put the file http://img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.Paid%20In%20Full.mp3
This address cannot be downloaded directly or played in the web player. , click Download to go to a download page. If you want to be able to directly download or play this file, you need to forge the referfer and deceive the server. The referfer is a link from the nanodisk.
The first method used is to use PHP’s built-in function stream_context_create.
The code is as follows:
function referrfile($url, $refer=”) {
$opt=array('http'=>array('header'=>" Referer: $refer”));
$context=stream_context_create( $opt);
return file_get_contents($url,false, $context);
}
But this code has A shortcoming is that file_get_contents actually reads the files from the other party's server to its own server and then sends them to the browser. This not only increases the pressure on your own server, but also the download response speed is very slow. This is not a good solution. .
Then I read the manual again. I want to reduce the pressure on my own server and also confuse the other server.
The revised code is as follows. :
$url=”img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.Paid%20In%20Full.mp3″;//The url here should be filtered out http://
$urlarr=explode(” /”,$url);
$domain=$urlarr[0];//Decompose the domain name
$getfile=str_replace($urlarr[0],”,$url);
$content = @fsockopen(”$domain”, 80, $errno, $errstr, 12);//Connect to the other party’s server first
if (!$content){//If the connection cannot be made, an error message will be prompted
die( "Sorry, unable to connect to $domain .");
}
fputs($content, "GET $getfile HTTP/1.0rn");
fputs($content, "Host: $domainrn") ;
fputs($content, “Referer: $domainrn”);//Fake referfer
fputs($content, “User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)rnrn”) ;
while (!feof($content)) {
$tp.=fgets($content, 128); Read the header information, which will contain: Location: http:// xxx/xxx.mp3, this is the address we want.
}
$arr=explode("n",$tp);
$arr1=explode("Location: ",$tp);
$arr2=explode("n",$ arr1[1]);//Decompose the address behind Location:
header('Content-Type:application/force-download');
header("location:".$arr2[0]);
fclose($content);
OK, the purpose is achieved.
This original address: http://img.namipan.com/downfile/3a7c64518d46d986283eab73175a8b119305a76480b89200/Equilibrium-Turis_Fratir-02-Wingthors_Hammer.mp3
After conversion:
http ://mms.music.krmcn.com/mms.music/namipan/img~~/3a7c64518d46d986283eab73175a8b119305a76480b89200/Equilibrium-Turis_Fratir-02-Wingthors_Hammer.mp3