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)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
随机推荐
- 【转】javascript 小数乘法结果错误处理
一.用js计算 12.32 * 7 结果是多少? 答案:86.24000000000001 为什么会出现这种问题?怎么解决? js在处理小数的乘除法的时候有一个bug,解决的方法可以是:将小数变 ...
- Unity 烘焙的2种方式
游戏场景通常有许多光源,使用实时渲染会非常消耗性能,解决办法是烘焙,烘焙有2种方式. 1, 在3dmax等模型制作软件中对场景进行烘焙.将烘焙好的模型以及贴图导入到unity3d. 相对复杂但效果好 ...
- 11 个使用 GNOME 3 桌面环境的理由
11 个使用 GNOME 3 桌面环境的理由 作者: David Both 译者: LCTT geekpi | 2017-08-22 11:43 评论: 27 GNOME 3 桌面的设计目的是简单 ...
- Eclipse本地创建新的GIT分支,并推送至远程Git分支
本地创建新的GIT分支: 1.右击要创建新分支的项目——Team——Switch To——New Branch…: 2.在弹出的对话框中name框中输入要创建的分支名称,(如果是当前显示的要拷贝的分支 ...
- zabbix部署监控端(server)以及页面优化
实验环境准备 172.20.10.2 server.zabbix.com 172.20.10.3 agent.zabbix.com 172.20.10.8 windows10 Server 端 [ro ...
- 使用json_decode无法解析json
在接入合作方接口时,遇到一个json无法解析出来代码如下: <?php $res='{"resultcode":007,"resMsg":"!& ...
- windows下Word使用-快捷键
1.word全屏显示——Alt+U+V 2.上标——Ctrl+Shift+= 3.下标——Ctrl+=
- HTML 编码规范
语法 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格或 tab 字符 在属性上,使用双引号 "",不要使用单引号 '' 属性名 / 属性值全小写,用中划线 - 做分隔符 ...
- Python socket通信之FTP
Python中利用socket进行server端和client端通信是网络编程的基础,是最简单的传输范例. (懂网络的请自动跳过这一部分) 首先,要想通信,必须建立连接,建立连接的过程,需要clien ...
- 紫书 例题8-3 UVa 1152(中途相遇法)
这道题要逆向思维, 就是求出答案的一部分, 然后反过去去寻找答案存不存在. 其实很多其他题都用了这道题目的方法, 自己以前都没有发现, 这道题专门考这个方法.这个方法可以没有一直往下求, 可以省去很多 ...