php发送post请求方法

来源:互联网 发布:淘宝的开车精灵有用吗 编辑:程序博客网 时间:2024/06/06 19:11

方法一:

/** * 发送post请求 * @param string $url 请求地址 * @param array $post_data post键值对数据 * @return string */function send_post($url, $post_data) {   $postdata = http_build_query($post_data);  $options = array(    'http' => array(      'method' => 'POST',      'header' => 'Content-type:application/x-www-form-urlencoded',      'content' => $postdata,      'timeout' => 15 * 60 // 超时时间(单位:s)    )  );  $context = stream_context_create($options);  $result = file_get_contents($url, false, $context);   return $result;} //使用方法$post_data = array(  'username' => 'stclair2201',  'password' => 'handan');send_post('http://www.jb51.net', $post_data);



方法二   Socket版本

<?php/** * Socket版本 * 使用方法: * $post_string = "app=socket&version=beta"; * request_by_socket('chajia8.com', '/restServer.php', $post_string); */function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30) {  $socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);  if (!$socket) die("$errstr($errno)");  fwrite($socket, "POST $remote_path HTTP/1.0");  fwrite($socket, "User-Agent: Socket Example");  fwrite($socket, "HOST: $remote_server");  fwrite($socket, "Content-type: application/x-www-form-urlencoded");  fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . "");  fwrite($socket, "Accept:*/*");  fwrite($socket, "");  fwrite($socket, "mypost=$post_string");  fwrite($socket, "");  $header = "";  while ($str = trim(fgets($socket, 4096))) {    $header .= $str;  }   $data = "";  while (!feof($socket)) {    $data .= fgets($socket, 4096);  }   return $data;}?>

方法三   curl版本

<?php/** * Curl版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_curl('http://www.jb51.net/restServer.php', $post_string); */function request_by_curl($remote_server, $post_string) {  $ch = curl_init();  curl_setopt($ch, CURLOPT_URL, $remote_server);  curl_setopt($ch, CURLOPT_POSTFIELDS, 'mypost=' . $post_string);  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  curl_setopt($ch, CURLOPT_USERAGENT, "jb51.net's CURL Example beta");  $data = curl_exec($ch);  curl_close($ch);   return $data;}?>


下面是其他网友的方法:

class Request{  public static function post($url, $post_data = '', $timeout = 5){//curl    $ch = curl_init();    curl_setopt ($ch, CURLOPT_URL, $url);    curl_setopt ($ch, CURLOPT_POST, 1);    if($post_data != ''){      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);    }    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);     curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);    curl_setopt($ch, CURLOPT_HEADER, false);    $file_contents = curl_exec($ch);    curl_close($ch);    return $file_contents;  }  public static function post2($url, $data){//file_get_content         $postdata = http_build_query(      $data    );         $opts = array('http' =>           array(             'method' => 'POST',             'header' => 'Content-type: application/x-www-form-urlencoded',             'content' => $postdata           )    );         $context = stream_context_create($opts);    $result = file_get_contents($url, false, $context);    return $result;  }  public static function post3($host,$path,$query,$others=''){//fsocket    $post="POST $path HTTP/1.1\r\nHost: $host\r\n";    $post.="Content-type: application/x-www-form-";    $post.="urlencoded\r\n${others}";    $post.="User-Agent: Mozilla 4.0\r\nContent-length: ";    $post.=strlen($query)."\r\nConnection: close\r\n\r\n$query";    $h=fsockopen($host,80);    fwrite($h,$post);    for($a=0,$r='';!$a;){        $b=fread($h,8192);        $r.=$b;        $a=(($b=='')?1:0);      }    fclose($h);    return $r;  }}

对于远程请求,有很多种方法。今天,LZ就搜罗了六种,供大家参考。

1、用file_get_contents 以get方式获取内容:

<?php$url='http://www.ido321.com/';$html = file_get_contents($url);echo $html;?>

 

   2、用fopen打开url,用get方式获取

$fp = fopen($url, 'r');stream_get_meta_data($fp);while(!feof($fp)) {$result .= fgets($fp, 1024);}echo "url body: $result";fclose($fp);

 

 

3、用file_get_contents 以post方式获取内容:

$data = array ('foo' => 'bar');$data = http_build_query($data); $opts = array ('http' => array ('method' => 'POST','header'=> "Content-type: application/x-www-form-urlencodedrn" .'Content-Length: ' . strlen($data) . 'rn','content' => $data)); $context = stream_context_create($opts);$html = file_get_contents('http://localhost/e/admin/test.html', false, $context); echo $html;

 

 

    4、用fsockopen函数打开url,以get方式获取完整的数据,包括header和body,fsockopen需要 PHP.ini 中 allow_url_fopen 选项开启

function get_url ($url,$cookie=false){$url = parse_url($url);$query = $url[path].'?'.$url[query];echo 'Query:'.$query;$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);if (!$fp) {return false;} else {$request = 'GET $query HTTP/1.1rn';$request .= 'Host: $url[host]rn';$request .= 'Connection: Closern';if($cookie) $request.='Cookie:  $cookien';$request.='rn';fwrite($fp,$request);while(!@feof($fp)) {$result .= @fgets($fp, 1024);}fclose($fp);return $result;}}//获取url的html部分,去掉headerfunction GetUrlHTML($url,$cookie=false){$rowdata = get_url($url,$cookie);if($rowdata){$body= stristr($rowdata,'rnrn');$body=substr($body,4,strlen($body));return $body;} return false;}

 

 

     5、用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body

function HTTP_Post($URL,$data,$cookie, $referrer=''){ // parsing the given URL$URL_Info=parse_url($URL); // Building referrerif($referrer=='') // if not given use this script as referrer$referrer='111'; // making string from $dataforeach($data as $key=>$value)$values[]='$key='.urlencode($value);$data_string=implode('&',$values); // Find out which port is needed – if not given use standard (=80)if(!isset($URL_Info['port']))$URL_Info['port']=80; // building POST-request:$request.="POST ".$URL_Info['path']." HTTP/1.1n";$request.="Host: ".$URL_Info['host']."n";$request.="Referer: $referern";$request.="Content-type: application/x-www-form-urlencodedn";$request.='Content-length: '.strlen($data_string)."n";$request.='Connection: closen'; $request.='Cookie:  $cookien'; $request.='n';$request.=$data_string.'n'; $fp = fsockopen($URL_Info['host'],$URL_Info['port']);fputs($fp, $request);while(!feof($fp)) {$result .= fgets($fp, 1024);}fclose($fp); return $result;}

 

 

    6、使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展

$ch = curl_init();$timeout = 5;curl_setopt ($ch, CURLOPT_URL, ‘http://www.ido321.com/');curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);$file_contents = curl_exec($ch);curl_close($ch); echo $file_contents;

 

原文首发:http://www.ido321.com/1297.html






原创粉丝点击