您的位置:首页 > 编程语言 > PHP开发

php发送post请求的三种方法

2017-10-28 14:25 501 查看
方法一:

/**

 * 发送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.xxxx.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, CU
4000
RLOPT_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;

  }
}

原文地址 http://www.jb51.net/article/46627.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: