www example español authenticate auth autenticación php http http-basic-authentication

example - php digest



Realización de una solicitud HTTP GET con autenticación HTTP-Basic (4)

¿De verdad quieres usar php para eso?

un simple script de javascript lo hace:

function login(username, password, url) { var http = getHTTPObject(); http.open("get", url, false, username, password); http.send(""); //alert ("HTTP status : "+http.status); if (http.status == 200) { //alert ("New window will be open"); window.open(url, "My access", "width=200,height=200", "width=300,height=400,scrollbars=yes"); //win.document.location = url; } else { alert("No access to the secured web site"); } } function getHTTPObject() { var xmlhttp = false; if (typeof XMLHttpRequest != ''undefined'') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; } } else { /*@cc_on @if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } @end @*/ } return xmlhttp; }

Necesito crear un proxy para un proyecto de Flash Player en el que estoy trabajando. Simplemente necesito hacer una solicitud HTTP GET con autenticación HTTP-Basic a otra URL, y enviar la respuesta de PHP como si el archivo PHP fuera la fuente original. ¿Cómo puedo hacer esto?


Marc B hizo un gran trabajo respondiendo esta pregunta. Recientemente tomé su enfoque y quería compartir el código resultante.

<?PHP $username = "some-username"; $password = "some-password"; $remote_url = ''http://www.somedomain.com/path/to/file''; // Create a stream $opts = array( ''http''=>array( ''method''=>"GET", ''header'' => "Authorization: Basic " . base64_encode("$username:$password") ) ); $context = stream_context_create($opts); // Open the file using the HTTP headers set above $file = file_get_contents($remote_url, false, $context); print($file); ?>

Espero que esto sea de ayuda para las personas!


Tomé el código de @ clone45 y lo convertí en una serie de funciones algo así como la interfaz de requests de Python (suficiente para mis propósitos) sin usar solo un código externo. Tal vez pueda ayudar a alguien más.

Lo maneja:

  • autenticación básica
  • encabezados
  • GET Params

Uso:

$url = ''http://sweet-api.com/api''; $params = array(''skip'' => 0, ''top'' => 5000); $header = array(''Content-Type'' => ''application/json''); $header = addBasicAuth($header, getenv(''USER''), getenv(''PASS'')); $response = request("GET", $url, $header, $params); print($response);

Definiciones

function addBasicAuth($header, $username, $password) { $header[''Authorization''] = ''Basic ''.base64_encode("$username:$password"); return $header; } // method should be "GET", "PUT", etc.. function request($method, $url, $header, $params) { $opts = array( ''http'' => array( ''method'' => $method, ), ); // serialize the header if needed if (!empty($header)) { $header_str = ''''; foreach ($header as $key => $value) { $header_str .= "$key: $value/r/n"; } $header_str .= "/r/n"; $opts[''http''][''header''] = $header_str; } // serialize the params if there are any if (!empty($params)) { $params_array = array(); foreach ($params as $key => $value) { $params_array[] = "$key=$value"; } $url .= ''?''.implode(''&'', $params_array); } $context = stream_context_create($opts); $data = file_get_contents($url, false, $context); return $data; }