chcę napisać maly serwer proxy i napisałem cos takiego (wszystko działa tzn dostaję nagłówek http itd ale gdy próbuje odpowiedzieć klientowi wyrzuca błąd że nie może wysłać- może ktos wie jak odpowiedzieć (w ponizszym kodzie forum usunęło backslashe z niektórych znaków specjalnych)?):
  1. <?php
  2.  
  3. $addr = my_ip();
  4.  
  5. $local_port=80;
  6. function my_ip($dest='64.0.0.0', $port=80)
  7. {
  8. $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
  9. socket_connect($socket, $dest, $port);
  10. socket_getsockname($socket, $addr, $port);
  11. socket_close($socket);
  12. return $addr;
  13. }
  14.  
  15.  
  16.  
  17.  
  18. while(1){
  19.  
  20.  
  21. $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
  22. socket_bind($socket,NULL,80);
  23. socket_listen($socket);
  24.  
  25.  
  26. $conn = false;
  27. switch(socket_select($r = array($socket), $w = array($socket), $e = array($socket), 60)) {
  28. case 2:
  29.  
  30. break;
  31. case 1:
  32.  
  33. $conn = socket_accept($socket);
  34.  
  35. break;
  36. case 0:
  37.  
  38. break;
  39. }
  40.  
  41.  
  42. if ($conn !== false) {
  43. $buffer="";
  44. $buffer1="";
  45. while($buffer=socket_read($conn,512,PHP_BINARY_READ)){
  46. $buffer1.=$buffer;
  47. }
  48.  
  49.  
  50.  
  51.  $buffer=$buffer1;
  52.  
  53.  
  54.  preg_match("@s*([POST|GET])s*(http[^s]*).*@si",$buffer,$address);
  55.  
  56.  
  57. $address=$address[2];
  58.  
  59.  if(preg_match("@s*POSTs*http@si",$buffer,$new)){
  60.  
  61.  
  62.  
  63. $method="POST";
  64.  
  65.  
  66. }  if(preg_match("@s*GETs*http@si",$buffer,$new)){
  67.  
  68.  
  69.  
  70. $method="GET";
  71.  
  72.  
  73. }
  74.  
  75. $address.$method;
  76.  
  77.  
  78.  if($method=="GET"){
  79.  
  80. $ch = curl_init();
  81. curl_setopt($ch, CURLOPT_COOKIEJAR, "cookiejar21"."");
  82. curl_setopt($ch, CURLOPT_COOKIEFILE, "cookiejar21"."");
  83. curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
  84. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  85. curl_setopt($ch, CURLOPT_MAXREDIRS, 15);
  86. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  87. @curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
  88. curl_setopt($ch, CURLOPT_URL,$url=$address);
  89. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
  90. curl_setopt($ch, CURLOPT_TIMEOUT, 25);
  91. curl_setopt($ch, CURLOPT_HEADER, 0);
  92. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  93. $echo = curl_exec($ch);
  94.  
  95. $zm='HTTP/1.0 200 OKrnCache-Control: privaternContent-Type: text/html; charset=ISO-8859-2rnProxy-Connection: closernrn';
  96.  
  97. $addr1="";
  98. $port1="";
  99.  
  100. socket_getpeername ($conn,&$addr1,&$port1);
  101.  
  102.  
  103.  
  104.  
  105.  
  106. $buf = $zm.$echo;
  107. $len = strlen($buf);
  108.  
  109.  socket_connect($socket, $addr1, (int)$port1);
  110.  
  111.  socket_write($socket,$buf,$len);
  112.  
  113.  
  114. }elseif($method=="POST"){
  115. }else{
  116.  
  117. }
  118.  }
  119.  
  120.  
  121.  
  122. socket_close($socket);
  123.  
  124. }
  125.  
  126. ?>


Nikt nie wie jak to zrobić ?