file_get_contents版本:
04 |
* @param string $url 请求地址 |
立即学习“PHP免费学习笔记(深入)”;
05 |
* @param array $post_data post键值对数据 |
08 |
functionsend_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 |
functionrequest_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 |
functionrequest_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 请求地址 |
立即学习“PHP免费学习笔记(深入)”;
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 |
functionsend_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 |
} elseif('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教程有兴趣的朋友有所帮助。