php发送post请求的三种方法
方法一:
/**
* 发送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'
);
方法二: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
;
}
}