file_get_contents版本:
04 |
* @param string $url 请求地址
|
05 |
* @param array $post_data post键值对数据
|
08 |
function send_post( $url ,
$post_data ) {
|
10 |
$postdata = http_build_query( $post_data );
|
14 |
'header' => 'Content-type:application/x-www-form-urlencoded' ,
|
15 |
'content' => $postdata ,
|
16 |
'timeout' => 15 * 60 // 超时时间(单位:s)
|
19 |
$context = stream_context_create( $options );
|
20 |
$result = file_get_contents ( $url , false,
$context );
|
使用如下:
2 |
'username' => 'stclair2201' ,
|
5 |
send_post( 'http://blog.snsgou.com' ,
$post_data );
|
实战经验:
当我利用上述代码给另一台服务器发送http请求时,发现,如果服务器处理请求时间过长,本地的PHP会中断请求,即所谓的超时中断,第一个怀疑的是PHP本身执行时间的超过限制,但想想也不应该,因为老早就按照这篇文章设置了“PHP执行时间限制”(【推荐】PHP上传文件大小限制大全 ),仔细琢磨,想想,应该是http请求本身的一个时间限制,于是乎,就想到了怎么给http请求时间限制搞大一点。。。。。。查看PHP手册,果真有个参数
“ timeout ”,默认不知道多大,当把它的值设大一点,问题得已解决,弱弱地做个笔记~~~
Socket版本:
04 |
* $post_string = "app=socket&version=beta";
|
05 |
* request_by_socket('blog.snsgou.com', '/restServer.php', $post_string);
|
07 |
function request_by_socket( $remote_server , $remote_path , $post_string , $port = 80, $timeout = 30) {
|
08 |
$socket = fsockopen ( $remote_server ,
$port , $errno ,
$errstr , $timeout );
|
09 |
if (! $socket )
die ( "$errstr($errno)" );
|
10 |
fwrite( $socket ,
"POST $remote_path HTTP/1.0" );
|
11 |
fwrite( $socket ,
"User-Agent: Socket Example" );
|
12 |
fwrite( $socket ,
"HOST: $remote_server" );
|
13 |
fwrite( $socket ,
"Content-type: application/x-www-form-urlencoded" );
|
14 |
fwrite( $socket ,
"Content-length: " . ( strlen ( $post_string ) + 8) .
"" );
|
15 |
fwrite( $socket ,
"Accept:*/*" );
|
17 |
fwrite( $socket ,
"mypost=$post_string" );
|
20 |
while ( $str = trim( fgets ( $socket , 4096))) {
|
25 |
while (! feof ( $socket )) {
|
26 |
$data .= fgets ( $socket , 4096);
|
Curl版本:
04 |
* $post_string = "app=request&version=beta";
|
05 |
* request_by_curl('http://blog.snsgou.com/restServer.php', $post_string);
|
07 |
function request_by_curl( $remote_server ,
$post_string ) {
|
09 |
curl_setopt( $ch , CURLOPT_URL,
$remote_server );
|
10 |
curl_setopt( $ch , CURLOPT_POSTFIELDS,
'mypost=' . $post_string );
|
11 |
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);
|
12 |
curl_setopt( $ch , CURLOPT_USERAGENT,
"snsgou.com's CURL Example beta" );
|
13 |
$data = curl_exec( $ch );
|
Curl版本(2)
04 |
* @param string $url 请求地址
|
05 |
* @param string $method 请求方式 GET/POST
|
06 |
* @param string $refererUrl 请求来源地址
|
07 |
* @param array $data 发送数据
|
08 |
* @param string $contentType
|
09 |
* @param string $timeout
|
10 |
* @param string $proxy
|
13 |
function send_request( $url ,
$data , $refererUrl = '' , $method = 'GET' ,
$contentType = 'application/json' ,
$timeout = 30, $proxy = false) {
|
15 |
if ( 'POST' === strtoupper ( $method )) {
|
17 |
curl_setopt( $ch , CURLOPT_POST, 1);
|
18 |
curl_setopt( $ch , CURLOPT_HEADER,0 );
|
19 |
curl_setopt( $ch , CURLOPT_FRESH_CONNECT, 1);
|
20 |
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
|
21 |
curl_setopt( $ch , CURLOPT_FORBID_REUSE, 1);
|
22 |
curl_setopt( $ch , CURLOPT_TIMEOUT,
$timeout );
|
24 |
curl_setopt( $ch , CURLOPT_REFERER,
$refererUrl );
|
27 |
curl_setopt( $ch , CURLOPT_HTTPHEADER,
array ( 'Content-Type:' . $contentType ));
|
30 |
curl_setopt( $ch , CURLOPT_POSTFIELDS,
$data );
|
32 |
curl_setopt( $ch , CURLOPT_POSTFIELDS, http_build_query( $data ));
|
34 |
} else if ( 'GET' === strtoupper ( $method )) {
|
35 |
if ( is_string ( $data )) {
|
36 |
$real_url = $url . ( strpos ( $url ,
'?' ) === false ? '?' : '' ).
$data ;
|
38 |
$real_url = $url . ( strpos ( $url ,
'?' ) === false ? '?' : '' ). http_build_query( $data );
|
41 |
$ch = curl_init( $real_url );
|
42 |
curl_setopt( $ch , CURLOPT_HEADER, 0);
|
43 |
curl_setopt( $ch , CURLOPT_HTTPHEADER,
array ( 'Content-Type:' . $contentType ));
|
44 |
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
|
45 |
curl_setopt( $ch , CURLOPT_TIMEOUT,
$timeout );
|
47 |
curl_setopt( $ch , CURLOPT_REFERER,
$refererUrl );
|
50 |
$args = func_get_args();
|
55 |
curl_setopt( $ch , CURLOPT_PROXY,
$proxy );
|
58 |
$info = curl_getinfo( $ch );
|
调用 WCF接口 的一个例子:$json = restRequest($r_url,'POST', json_encode($data));
以上就介绍了php实现post和get,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn