php实现post和get
时间:2021-07-01 10:21:17
帮助过:16人阅读
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教程有兴趣的朋友有所帮助。