the_tags tag name mostrar get_the_tags get_the_tag_list first all post header http-headers

post - name - the_tags wordpress



¿Cómo POST a una página usando la función de encabezado() de PHP? (5)

Además de lo que dijo Salaryman, eche un vistazo a las clases en PEAR , existen clases de solicitud HTTP que puede usar incluso si no tiene la extensión cURL instalada en su distribución de PHP.

Encontré el siguiente código here que creo que hace lo que quiero, pero no funciona:

$host = "www.example.com"; $path = "/path/to/script.php"; $data = "data1=value1&data2=value2"; $data = urlencode($data); header("POST $path HTTP/1.1/r/n"); header("Host: $host/r/n"); header("Content-type: application/x-www-form-urlencoded/r/n"); header("Content-length: " . strlen($data) . "/r/n"); header("Connection: close/r/n/r/n"); header($data);

Estoy buscando publicar datos de formularios sin enviar usuarios a una página intermedia y luego usar JavaScript para redirigirlos. Tampoco quiero usar GET, por lo que no es tan fácil usar el botón Atrás.

¿Hay algo mal con este código? ¿O hay un método mejor?

Editar Estaba pensando en lo que haría la función de encabezado. Estaba pensando que podría hacer que el navegador vuelva a publicar en el servidor con los datos, pero esto no es lo que está destinado a hacer. En su lugar, encontré una forma en mi código para evitar la necesidad de una publicación (sin interrumpir y simplemente continuar con el siguiente caso dentro del conmutador).



La función de encabezado se usa para enviar encabezados de respuesta HTTP al usuario (es decir, no puede usarla para crear encabezados de solicitud).

¿Puedo preguntar por qué haces esto? ¿Por qué simular una solicitud POST cuando puede estar justo allí y luego actuar sobre los datos de alguna manera? Supongo que, por supuesto, script.php reside en su servidor.

Para crear una solicitud POST, abra una conexión TCP al host usando fsockopen (), luego use fwrite () en el controlador devuelto desde fsockopen () con los mismos valores que utilizó en las funciones de encabezado en el OP. Alternativamente, puede utilizar cURL.


La respuesta a esto es muy necesaria hoy porque no todos quieren usar cURL para consumir servicios web. También PHP permite esto usando el siguiente código

function get_info() { $post_data = array( ''test'' => ''foobar'', ''okay'' => ''yes'', ''number'' => 2 ); // Send a request to example.com $result = $this->post_request(''http://www.example.com/'', $post_data); if ($result[''status''] == ''ok''){ // Print headers echo $result[''header'']; echo ''<hr />''; // print the result of the whole request: echo $result[''content'']; } else { echo ''A error occured: '' . $result[''error'']; } } function post_request($url, $data, $referer='''') { // Convert the data array into URL Parameters like a=b&foo=bar etc. $data = http_build_query($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: fputs($fp, "POST $path HTTP/1.1/r/n"); fputs($fp, "Host: $host/r/n"); if ($referer != '''') fputs($fp, "Referer: $referer/r/n"); fputs($fp, "Content-type: application/x-www-form-urlencoded/r/n"); fputs($fp, "Content-length: ". strlen($data) ."/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); }


private function sendHttpRequest($host, $path, $query, $port=80){ header("POST $path HTTP/1.1/r/n" ); header("Host: $host/r/n" ); header("Content-type: application/x-www-form-urlencoded/r/n" ); header("Content-length: " . strlen($query) . "/r/n" ); header("Connection: close/r/n/r/n" ); header($query); }

Esto te llevará de inmediato