4

fsockopen関数とHEADコマンドのおかげで、リモートmp4ファイルのファイルサイズを尋ねるPHP実行コードがあります。

今、私はこのコードをプロキシの背後にある他のサーバーに移動する必要があります。これは、その新しいプロキシを通過し、fsockopenを引き続き使用するための最良のアプローチですか?私は本当に立ち往生しています。2つのソケットをトンネリングまたは処理できません。

何か案は?あなたの助けと時間をありがとう。

private function filesize_remote($remotefile, $timeout=10) {
       $size = false;
       $url = parse_url($remotefile);

       if ($fp = @fsockopen($url['host'], ($url['port'] ? $url['port'] : 80), $errno, $errstr, $timeout)) {
          fwrite($fp, 'HEAD '.@$url['path'].@$url['query'].' HTTP/1.0'."\r\n".'Host: '.@$url['host']."\r\n\r\n");
          while (!feof($fp)) {
             $headerline = fgets($fp, 4096);
             if (preg_match('/^Content-Length: (.*)/', $headerline, $matches)) {
                $size = intval($matches[1]);
                break;
             }
          }
          fclose ($fp);
       }

       return $size;  
    } 
4

1 に答える 1

9

プロキシなし:

<?php
$fp = fsockopen("www.wahoo.com",80);

fputs($fp, "GET <a href=\"http://www.yahoo.com/\" "
  ."title=\"http://www.yahoo.com/\">http://www.yahoo.com/</a> HTTP/1.0\r\n\r\n");

$data="";
while (!feof($fp)) $data.=fgets($fp,64000);
fclose($fp);

print $data;
?>

プロキシあり:

<?php
$ip = "1.2.3.4"; // proxy IP, change this according to your proxy setting
$port = 1234; // proxy port, change this according to your proxy setting

$fp = fsockopen($ip,$port); // connect to proxy
fputs($fp, "GET <a href=\"http://www.yahoo.com/\"   "
  . "title=\"http://www.yahoo.com/\">http://www.yahoo.com/</a>  "
  . "HTTP/1.0\r\nHost:www.yahoo.com:80\r\n\r\n");

$data="";
while (!feof($fp)) $data.=fgets($fp,64000);
fclose($fp);

print $data;
?>

プロキシと認証あり:

<?php
$ip = "1.2.3.4"; // proxy IP, change this according to your proxy setting
$port = 1234; // proxy port, change this according to your proxy setting

$fp = fsockopen($ip,$port); // connect to proxy

$login = "Alexander"; // login name
$passwd = "kiss me"; // password

fputs($fp, "GET <a href=\"http://www.yahoo.com/\" "
 . "title=\"http://www.yahoo.com/\">http://www.yahoo.com/</a> HTTP/1.1\r\n"
 . "Host:www.yahoo.com:80\r\n"
 . "Proxy-Authorization: Basic ".base64_encode("$login:$passwd") ."\r\n\r\n");

$data="";
while (!feof($fp)) $data.=fgets($fp,64000);
fclose($fp);

//12314
print $data;
?>

ここを見てください: Fsockopen with proxy

于 2011-09-02T15:39:11.587 に答える