php socket方式提交的post详解

  <?

  /*

  ** POST报文到主机

  */

  function PostToHost($url, $data) {

  $url = parse_url($url);

  if (!$url) return "couldn\'t parse url";

  if (!isset($url[\'port\'])) { $url[\'port\'] = ""; }

  if (!isset($url[\'query\'])) { $url[\'query\'] = ""; }

  $encoded = "";

  while (list($k,$v) = each($data)) {

  $encoded .= ($encoded ? "&" : "");

  $encoded .= rawurlencode($k)."=".rawurlencode($v);

  }

  $port = $url[\'port\'] ? $url[\'port\'] : 80;

  $fp = fsockopen($url[\'host\'], $port, $errno, $errstr);

  if (!$fp) return "Failed to open socket to $url[host] $port ERROR: $errno - $errstr";

  fputs($fp, sprintf("POST %s%s%s HTTP/1.0\\n", $url[\'path\'], $url[\'query\'] ? "?" : "", $url[\'query\']));

  fputs($fp, "Host: $url[host]\\n");

  fputs($fp, "Content-type: application/x-www-form-urlencoded\\n");

  fputs($fp, "Content-length: " . strlen($encoded) . "\\n");

  fputs($fp, "Connection: close\\n\\n");

  fputs($fp, "$encoded\\n");

  $line = fgets($fp,1024);

  if (!eregi("^HTTP/1\\.. 200", $line)) return;

  $results = ""; $inheader = 1;

  while(!feof($fp)) {

  $line = fgets($fp,1024);

  if ($inheader && ($line == "\\n" || $line == "\\r\\n")) {

  $inheader = 0;

  }

  elseif (!$inheader) {

  $results .= $line;

  }

  }

  fclose($fp);

  return $results;

  }/* end function PostToHost */

  ?>