// 发送post请求
// @param string $url 请求地址
// @param array $post_data post键值对数据
// @return string
function sendPost($url, $post_data){
// http_build_query()
// 生成URL-encode之后的请求字符串
//
// 备注:
// php5.3的分隔符用的是&,如果目标服务器也是php5.3,那么就不会出错。
// 但是如果目标服务器是java的tomcat或者别的,那么&可能就会处理错误。
// 以下的形式能够避免错误
// http_build_query($post_data, ‘‘, ‘&‘);
// stream_context_create()
// 创建并返回一个流的资源
$username=‘username‘;
$password=‘password‘;
$postData = http_build_query($post_data, ‘‘, ‘&‘);
$options = array(
‘http‘ =>array(
‘method‘=>"POST",
‘header‘=>"Accept-language: en\r\n".
"Cookie: foo=bar\r\n".
"Content-type: application/x-www-form-urlencoded\r\n".
"Authorization: Basic " . base64_encode("$username:$password").‘\r\n‘,
‘content‘ => $postData,
‘timeout‘ => 15 * 60,//超时时间(单位:s)
)
);
//创建并返回一个流的资源
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
return $result;
}
备注:如果目标地址需要登录验证,就需要红色字部分的代码,如果不需要登录验证,红色字部分代码不用写
- <?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;
- }
- ?>
- <?php
- /**
- * Curl版本
- * 使用方法:
- * $post_string = "app=request&version=beta";
- * request_by_curl(‘http://www.qianyunlai.com/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, "qianyunlai.com‘s CURL Example beta");
- $data = curl_exec($ch);
- curl_close($ch);
- return $data;
- }
- ?>