| groundhog |
29.01.2009 17:04 |
Воспользуйся моим кодом...
PHP код:
<?php
define("HTTP_GET", 0x0001);
define("HTTP_POST", 0x0002);
define("HTTP_HEAD", 0x0003);
define("HTTP_PUT", 0x0004);
define("HTTP_DELETE", 0x0006);
define("HTTP_TRACE", 0x0007);
define("HTTP_OPTIONS", 0x0008);
define("HTTP_PROPFIND", 0x0009);
define("HTTP_10", 0x0001);
define("HTTP_11", 0x0002);
if (!function_exists("curl_setopt_array")) {
function curl_setopt_array (&$curlHandler, $curlOptions)
{
if (!is_array($curlOptions)) return false;
foreach ($curlOptions as $option => $value) {
if (!curl_setopt($curlHandler, $option, $value))
return false;
}
return true;
}
}
function httpRequest ($requestMethod, $requestVersion,
$requestUrl, $requestHeaders, $requestBody, $requestTimeout,
$requestProxy,
&$responseCode = null, &$responseHeaders = null, &$responseBody = null,
&$errCode = null, &$errString = null)
{
if (!is_integer($requestTimeout))
return ($responseCode = $responseHeaders = $responseContent = false);
$urlData = parse_url($requestUrl);
if (!isset($urlData["host"]))
return ($responseCode = $responseHeaders = $responseContent = false);
if (!isset($urlData["scheme"])) $urlData["scheme"] = "http";
if (!isset($urlData["path"])) $urlData["path"] = "/";
if (!isset($urlData["port"]) && $urlData["scheme"] == "http") $urlData["port"] = 80;
if (!isset($urlData["port"]) && $urlData["scheme"] == "https") $urlData["port"] = 443;
switch ($requestMethod) {
case HTTP_GET :
$httpMethod = "GET";
break;
case HTTP_POST :
$httpMethod = "POST";
break;
case HTTP_HEAD :
$httpMethod = "HEAD";
break;
case HTTP_PUT :
$httpMethod = "PUT";
break;
case HTTP_DELETE :
$httpMethod = "DELETE";
break;
case HTTP_TRACE :
$httpMethod = "TRACE";
break;
case HTTP_OPTIONS :
$httpMethod = "OPTIONS";
break;
case HTTP_PROPFIND :
$httpMethod = "PROPFIND";
break;
default :
return ($responseCode = $responseHeaders = $responseContent = false);
break;
}
switch ($requestVersion) {
case HTTP_10 :
$httpVersion = "1.0";
break;
case HTTP_11 :
$httpVersion = "1.1";
break;
default :
return ($responseCode = $responseHeaders = $responseContent = false);
break;
}
if (isset($urlData["query"]))
$customRequest = sprintf("%s %s?%s HTTP/%s\r\n", $httpMethod, $urlData["path"], $urlData["query"], $httpVersion);
else
$customRequest = sprintf("%s %s HTTP/%s\r\n", $httpMethod, $urlData["path"], $httpVersion);
$customRequest .= sprintf("Host: %s\r\n", $urlData["host"]);
foreach ($requestHeaders as $header)
$customRequest .= sprintf("%s\r\n", $header);
if ($requestMethod == HTTP_POST || $requestMethod == HTTP_PUT)
if (strlen($requestBody) > 0) $customRequest .= sprintf("Content-Length: %s\r\n", strlen($requestBody));
else return ($responseCode = $responseHeaders = $responseContent = false);
if (isset($urlData["user"]) && isset($urlData["pass"])) {
$authValue = sprintf("%s:%s", $urlData["user"], $urlData["pass"]);
$customRequest .= sprintf("Authorization: Basic %s\r\n", base64_encode($authValue));
}
$customRequest .= sprintf("Connection: close\r\n", $urlData["host"]);
$customRequest .= "\r\n";
if ($requestMethod == HTTP_POST || $requestMethod == HTTP_PUT)
if (strlen($requestBody) > 0) $customRequest .= sprintf("%s", $requestBody);
else return ($responseCode = $responseHeaders = $responseContent = false);
$curlHandler = curl_init();
$curlOptions = array (
CURLOPT_URL => sprintf("%s://%s", $urlData["scheme"], $urlData["host"]),
CURLOPT_PORT => $urlData["port"],
CURLOPT_TIMEOUT => $requestTimeout,
CURLOPT_CUSTOMREQUEST => $customRequest,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HEADER => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FAILONERROR => false,
CURLOPT_VERBOSE => false,
CURLOPT_NOPROGRESS => true
);
if ($urlData["scheme"] == "https") {
$curlOptions[CURLOPT_SSL_VERIFYPEER] = false;
$curlOptions[CURLOPT_SSL_VERIFYHOST] = false;
}
if ($requestMethod == HTTP_HEAD || $requestMethod == HTTP_OPTIONS || $requestMethod == HTTP_DELETE)
$curlOptions[CURLOPT_NOBODY] = true;
else
$curlOptions[CURLOPT_NOBODY] = false;
if (!is_null($requestProxy)) {
$proxyData = parse_url("http://" . $requestProxy);
if (isset($proxyData["user"]) && isset($proxyData["pass"]))
$curlOptions[CURLOPT_PROXYUSERPWD] = sprintf("%s:%s", $proxyData["user"], $proxyData["pass"]);
if (!isset($proxyData["host"]))
return ($responseCode = $responseHeaders = $responseContent = false);
$curlOptions[CURLOPT_PROXY] = $proxyData["host"];
}
$result = curl_setopt_array($curlHandler, $curlOptions);
if (!$result) return ($responseCode = $responseHeaders = $responseContent = false);
$response = curl_exec($curlHandler);
$errCode = curl_errno($curlHandler);
$errString = sprintf("Error: %s", curl_error($curlHandler));
if (curl_errno($curlHandler) != CURLE_OK) {
$responseCode = false;
$responseHeaders = false;
$responseContent = false;
curl_close($curlHandler);
return false;
}
curl_close($curlHandler);
list($headers, $responseBody) = preg_split("/\r\n\r\n/", $response, 2);
$headers = preg_split("/\r\n/", $headers);
list(,$responseCode,) = sscanf(array_shift($headers), "%s %d %s");
$responseHeaders = $headers;
return true;
}
?>
|