Foros del Web » Programando para Internet » PHP »

solo acepta url de mi dominio

Estas en el tema de solo acepta url de mi dominio en el foro de PHP en Foros del Web. Hola amigos del foro, pues hoy os vengo a molestar de nuevo, pasa que descargue un codigo php para emular un proxy transparente y cuando ...
  #1 (permalink)  
Antiguo 10/03/2012, 01:34
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
solo acepta url de mi dominio

Hola amigos del foro, pues hoy os vengo a molestar de nuevo, pasa que descargue un codigo php para emular un proxy transparente y cuando pongo mi dominio "mjrosse.info" en la configuracion proxy y despues inserto una direccion me da este error "Error: Only HTTP request are supported !" pero cuando pongo por ejemplo mjrosse.info/ladireccion me funciona significa que algo en el codigo solo me esta permitiendo acceso sobre el mismo dominio Porfavor me podrian ayudar que ya llevo dias sin encontrar que es el problema
Código HTML:
<?php

if(!function_exists('apache_request_headers')) {

    function apache_request_headers() {
        $headers = array();
        foreach($_SERVER as $key => $value) {
            if(substr($key, 0, 5) == 'HTTP_') {
                $headers[str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value;
            }
        }
        return $headers;
    }
}

// Figure out requester's IP to shipt it to X-Forwarded-For
$ip = '';
if (!empty($_SERVER['HTTP_CLIENT_IP'])) { 
        $ip = $_SERVER['HTTP_CLIENT_IP'];
        //echo "HTTP_CLIENT_IP: ".$ip;
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        //echo "HTTP_X_FORWARDED_FOR: ".$ip;
} else {
        $ip = $_SERVER['REMOTE_ADDR'];
        //echo "REMOTE_ADDR: ".$ip;
}

preg_match('@^(?:http://)?([^/]+)@i', $_SERVER['HTTP_REFERER'], $matches);
$host = $matches[1];
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
$domainName = "{$matches[0]}";

if($domainName == $RequestDomain) {

        $method = $_SERVER['REQUEST_METHOD'];
        $response = proxy_request($destinationURL, ($method == "GET" ? $_GET : $_POST), $method);
        $headerArray = explode("\r\n", $response[header]);

        foreach($headerArray as $headerLine) {
         header($headerLine);
        }
        echo $response[content];
 
  } else {

        echo "HTTP Referer is not recognized. Cancelling all actions";

  }

function proxy_request($url, $data, $method) {
// Based on post_request from http://www.jonasjohn.de/snippets/php/post-request.htm
        global $ip;
        // Convert the data array into URL Parameters like a=b&foo=bar etc.
        $data = http_build_query($data);
        $datalength = strlen($data);
 
        // parse the given URL
        $url = parse_url($url);
 
        if ($url['scheme'] != 'http') { 
                die('Error: Only HTTP request are supported !');
        }
 
        // extract host and path:
        $host = $url['host'];
        $path = $url['path'];
        
        // open a socket connection on port 80 - timeout: 30 sec
        $fp = fsockopen($host, 80, $errno, $errstr, 30);
 
        if ($fp){
                // send the request headers:
                if($method == "POST") {
                        fputs($fp, "POST $path HTTP/1.1\r\n");
                } else {
                        fputs($fp, "GET $path?$data HTTP/1.1\r\n");
                }
                fputs($fp, "Host: $host\r\n");
                
                fputs($fp, "X-Forwarded-For: $ip\r\n");
                fputs($fp, "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"); 
                
                $requestHeaders = apache_request_headers();
                while ((list($header, $value) = each($requestHeaders))) {
                        if($header == "Content-Length") {
                                fputs($fp, "Content-Length: $datalength\r\n");
                        } else if($header !== "Connection" && $header !== "Host" && $header !== "Content-length") {
                                fputs($fp, "$header: $value\r\n");
                        }
                }
                fputs($fp, "Connection: close\r\n\r\n");
                fputs($fp, $data);
 
                $result = ''; 
                while(!feof($fp)) {
                        // receive the results of the request
                        $result .= fgets($fp, 128);
                }
        }
        else { 
                return array(
                        'status' => 'err', 
                        'error' => "$errstr ($errno)"
                );
        }
 
        // close the socket connection:
        fclose($fp);
 
        // split the result header from the content
        $result = explode("\r\n\r\n", $result, 2);
 
        $header = isset($result[0]) ? $result[0] : '';
        $content = isset($result[1]) ? $result[1] : '';
 
        // return as structured array:
        return array(
                'status' => 'ok',
                'header' => $header,
                'content' => $content
        );
}

?>
  #2 (permalink)  
Antiguo 10/03/2012, 01:53
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: solo acepta url de mi dominio

Código PHP:
Ver original
  1. preg_match('@^(?:http://)?([^/]+)@i', $_SERVER['HTTP_REFERER'], $matches);
  2. $host = $matches[1];
  3. preg_match('/[^.]+\.[^.]+$/', $host, $matches);
  4. $domainName = "{$matches[0]}";

Comrpueba el valor de matches y modifica la primera línea del código anterior, saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 10/03/2012, 02:02
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: solo acepta url de mi dominio

Amigo gracias por responder, pero erealiad no se que cambiar para que me funcione me podrias echar una manito porfavor
  #4 (permalink)  
Antiguo 10/03/2012, 02:09
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: solo acepta url de mi dominio

La implementación final la tienes que buscar tu, no conozco tu aplicación, esta línea:

preg_match('@^(?:http://)?([^/]+)@i', $_SERVER['HTTP_REFERER'], $matches);

busca el nombre de quien hace el request $_SERVER['HTTP_REFERER'].
Más abajo, compara el nombre de quién ahce el request con un nombre de dominio.

$domainName == $RequestDomain

Si es igual, continua, si no, da error. La cosa está en evitar o eliminar ese if. Utiliza echo para ver el valor de las varibales y comprueba de dónde sale $RequestDomain. Todo pasa por esta línea.
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 10/03/2012, 02:17
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: solo acepta url de mi dominio

amigo elimine esa parte y al parecer no es ahy porque este o no este esa parte del codigo siempre me tiea el error yo creo que esta en esta seccion pero no se que modificar
Cita:
// Convert the data array into URL Parameters like a=b&foo=bar etc.
$data = http_build_query($data);
$datalength = strlen($data);

// parse the given URL
$url = parse_url($url);

if ($url['scheme'] != 'http') {
die('Error: Only HTTP request are supported !');
}

// extract host and path:
$host = $url['host'];
$path = $url['path'];

// open a socket connection on port 80 - timeout: 30 sec
$fp = fsockopen($host, 80, $errno, $errstr, 30);
'Error: Only HTTP request are supported !')

Última edición por aplicacion1992; 10/03/2012 a las 02:18 Razón: exacto
  #6 (permalink)  
Antiguo 10/03/2012, 03:16
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: solo acepta url de mi dominio

Código PHP:
Ver original
  1. if ($url['scheme'] != 'http') {
  2. die('Error: Only HTTP request are supported !');
  3. }
la variable $url['scheme'] debe valer 'http', quita el if o bien arregla el programa para cambiar el valor de la variable.
__________________
Fere libenter homines, id quod volunt, credunt.
  #7 (permalink)  
Antiguo 10/03/2012, 03:32
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: solo acepta url de mi dominio

gracias por la ayuda amigo pero creo que definitivamente ese código no funciona http://code.google.com/p/php-transparent-proxy/downloads/list

Etiquetas: dominio, url, aceptar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:13.