php——get与post方法(转)
file_get_contents版本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?php /** * 发送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 ; } |
使用如下:
1
2
3
4
5
|
$post_data = array ( 'username' => 'stclair2201' , 'password' => 'handan' ); |
实战经验:
当我利用上述代码给另一台服务器发送http请求时,发现,如果服务器处理请求时间过长,本地的PHP会中断请求,即所谓的超时中断,第一个怀疑的是PHP本身执行时间的超过限制,但想想也不应该,因为老早就按照这篇文章设置了“PHP执行时间限制”(【推荐】PHP上传文件大小限制大全 ),仔细琢磨,想想,应该是http请求本身的一个时间限制,于是乎,就想到了怎么给http请求时间限制搞大一点。。。。。。查看PHP手册,果真有个参数 “ timeout ”,默认不知道多大,当把它的值设大一点,问题得已解决,弱弱地做个笔记~~~
Socket版本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
/** * Socket版本 * 使用方法: * $post_string = "app=socket&version=beta"; * request_by_socket('blog.snsgou.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版本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/** * Curl版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_curl('http://blog.snsgou.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, "snsgou.com's CURL Example beta" ); $data = curl_exec( $ch ); curl_close( $ch ); return $data ; } |
Curl版本(2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
/** * 发送HTTP请求 * * @param string $url 请求地址 * @param string $method 请求方式 GET/POST * @param string $refererUrl 请求来源地址 * @param array $data 发送数据 * @param string $contentType * @param string $timeout * @param string $proxy * @return boolean */ function send_request( $url , $data , $refererUrl = '' , $method = 'GET' , $contentType = 'application/json' , $timeout = 30, $proxy = false) { $ch = null; if ( 'POST' === strtoupper ( $method )) { $ch = curl_init( $url ); curl_setopt( $ch , CURLOPT_POST, 1); curl_setopt( $ch , CURLOPT_HEADER,0 ); curl_setopt( $ch , CURLOPT_FRESH_CONNECT, 1); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $ch , CURLOPT_FORBID_REUSE, 1); curl_setopt( $ch , CURLOPT_TIMEOUT, $timeout ); if ( $refererUrl ) { curl_setopt( $ch , CURLOPT_REFERER, $refererUrl ); } if ( $contentType ) { curl_setopt( $ch , CURLOPT_HTTPHEADER, array ( 'Content-Type:' . $contentType )); } if ( is_string ( $data )){ curl_setopt( $ch , CURLOPT_POSTFIELDS, $data ); } else { curl_setopt( $ch , CURLOPT_POSTFIELDS, http_build_query( $data )); } } else if ( 'GET' === strtoupper ( $method )) { if ( is_string ( $data )) { $real_url = $url . ( strpos ( $url , '?' ) === false ? '?' : '' ). $data ; } else { $real_url = $url . ( strpos ( $url , '?' ) === false ? '?' : '' ). http_build_query( $data ); } $ch = curl_init( $real_url ); curl_setopt( $ch , CURLOPT_HEADER, 0); curl_setopt( $ch , CURLOPT_HTTPHEADER, array ( 'Content-Type:' . $contentType )); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $ch , CURLOPT_TIMEOUT, $timeout ); if ( $refererUrl ) { curl_setopt( $ch , CURLOPT_REFERER, $refererUrl ); } } else { $args = func_get_args(); return false; } if ( $proxy ) { curl_setopt( $ch , CURLOPT_PROXY, $proxy ); } $ret = curl_exec( $ch ); $info = curl_getinfo( $ch ); $contents = array ( 'httpInfo' => array ( 'send' => $data , 'url' => $url , 'ret' => $ret , 'http' => $info , ) ); curl_close( $ch ); return $ret ; } |
php——get与post方法(转)的更多相关文章
- javaSE27天复习总结
JAVA学习总结 2 第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5) ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- 【.net 深呼吸】细说CodeDom(6):方法参数
本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- ArcGIS 10.0紧凑型切片读写方法
首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...
- [BOT] 一种android中实现“圆角矩形”的方法
内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...
- JS 判断数据类型的三种方法
说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
随机推荐
- ZBrush中如何实现智能对称
ZBrush软件智能化和人性化的工作流程让用户在创作中提高工作效率,体验创作乐趣,说起智能化不得不提的就是ZBrush 4R8®给我们提供的智能对称功能,所谓的智能对称就是当您在编辑其中一半的物体模型 ...
- php数组 匹配键值
1.array_search() //判断键值是否在数组中,//存在,返回值对应的键;//不存在,返回false;//例子:$type = array( "选考" => 'o ...
- CF449D Jzzhu and Numbers (状压DP+容斥)
题目大意: 给出一个长度为n的序列,构造出一个序列使得它们的位与和为0,求方案数 也就是从序列里面选出一个非空子集使这些数按位与起来为0. 看了好久才明白题解在干嘛,我们先要表示出两两组合位与和为0的 ...
- Ajax得到JSON数据
Ajax得到JSON数据
- input输入框获取焦点是背景黄色去除
input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important;}
- 获取ip,判断用户所在城市
PHP获取IP地址 这个比较简单了,利用PHP自带函数就可以了,PHP中文手册看一下,都有现成的例子,就不过多说明了,直接上代码,A段: <? //PHP获取当前用户IP地址方法 $xp_Use ...
- cogs 2170. 大整数取模
2170. 大整数取模 ★ 输入文件:bigint.in 输出文件:bigint.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 输入正整数n和m,输出n mo ...
- Android源代码解析之(七)-->LruCache缓存类
转载请标明出处:一片枫叶的专栏 android开发过程中常常会用到缓存.如今主流的app中图片等资源的缓存策略通常是分两级.一个是内存级别的缓存,一个是磁盘级别的缓存. 作为android系统的维护者 ...
- 从QQ聊天看交流的有效性
首先让我们看一则约10分钟的QQ群聊天记录.截图例如以下.已经进行了隐私保护. 交流的主体为大二的在校生与刚刚毕业的学长之间的对话,学长參加过培训,在校学弟想了解一下.故有了以下的交流.(从上到下,从 ...
- python实战之编码问题:中文!永远的痛
编码的思维图谱: 也就是说文件没有编码之说,事实上都是按二进制格式保存在硬盘中的.不过在写入读取时须使用相应的编码进行处理,以便操作系统配合相关软件/字体,绘制到屏幕中给人看.所以关键问题是得知道原先 ...