Recientemente, hemos escrito muchos programas para acceso remoto HTTP. Principalmente entramos en contacto con la clase WebHttpRequest en la biblioteca de clases .NET y el objeto común Microsoft.XMLHTTP. Con estas clases convenientes, podemos simular la Web a través de C#. Los clientes ASP y Javascript acceden a otras páginas web. Pero hoy quería usar PHP para implementar una función similar, pero no pude encontrar la dirección por un tiempo, así que tuve que "tener suficiente comida y ropa" yo solo.
En la actualidad, no existe una clase similar a HttpRequest en PHP. Sin embargo, encontré una página de clase HttpRequest en la documentación oficial en línea, pero solo menciona que esta función solo puede existir en la versión CVS. Desafortunadamente...
Para implementar
.El acceso HTTP no es más que enviar una solicitud utilizando Socket y luego leer la información de devolución. Así que escribí una clase HttpRequest usando Socket. Por supuesto, también se puede implementar usando la función fsockopen (), pero la diferencia entre las dos no es muy grande. El código específico se encuentra en el archivo adjunto.
<?php
/**
* Red: objeto de solicitud HTTP
* Autor: Li HouYu (Karajan Lee), Shanghai, China.
*/
clase HttpRequest{
var $sHostAdd;
var $sUri;
var $iPuerto;
var $sRequestHeader;
var $sRespuesta;
función HttpRequest($sUrl){
$sPatternUrlPart = '/http://([az-.0-9]+)(:(d+)){0,1}(.*)/i';
$arMatchUrlPart = matriz();
preg_match($sPatternUrlPart, $sUrl, $arMatchUrlPart);
$this->sHostAdd = gethostbyname($arMatchUrlPart[1]);
si (vacío($arMatchUrlPart[4])){
$this->sUri = '/';
}demás{
$this->sUri = $arMatchUrlPart[4];
}
si (vacío($arMatchUrlPart[3])){
$this->iPort = 80;
}demás{
$this->iPort = $arMatchUrlPart[3];
}
$this->addRequestHeader('Host: '.$arMatchUrlPart[1]);
$this->addRequestHeader('Conexión: Cerrar');
}
función agregarRequestHeader($sHeader){
$this->sRequestHeader .= trim($sHeader)."rn";
}
función enviarRequest($sMethod = 'GET', $sPostData = ''){
$sRequest = $sMethod." ".$this->sUri." HTTP/1.1rn";
$sRequest .= $this->sRequestHeader;
si ($sMétodo == 'POST'){
$sRequest .= "Tipo de contenido: aplicación/x-www-form-urlencodedrn";
$sRequest .= "Contenido-Longitud: ".strlen($sPostData)."rn";
$sSolicitud .= "rn";
$sRequest .= $sPostData."rn";
}
$sSolicitud .= "rn";
$sockHttp = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
si (!$sockHttp){
die('socket_create() falló!');
}
$resSockHttp = socket_connect($sockHttp, $this->sHostAdd, $this->iPort);
si (!$resSockHttp){
die('¡socket_connect() falló!');
}
socket_write($sockHttp, $sRequest, strlen($sRequest));
$this->sRespuesta = '';
mientras ($sRead = socket_read($sockHttp, 4096)){
$this->sResponse .= $sRead;
}
socket_close($sockHttp);
}
función obtenerRespuesta(){
devolver $this->sResponse;
}
función obtenerCuerpoRespuesta(){
$sPatternSeperate = '/rnrn/';
$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);
devolver $arMatchResponsePart[1];
}
función getResponseHead(){
$sPatternSeperate = '/rnrn/';
$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);
devolver $arMatchResponsePart[0];
}
}
?>