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)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
随机推荐
- c++标准库都有哪些文件
from:http://topic.csdn.net/u/20090201/16/3bd41b72-5694-474e-a68b-98b2f070e76b.html C++标准库的所有头文件都没有扩展 ...
- http接口服务方结合策略模式实现总结
在项目中,我们经常会使用到http+xml的接口,而且不仅仅的是一个,可能会有多个http的接口需要实时的交互.但是http接口的接收消息的公共部分是一样的,只有每个接口的报文解析和返回报文是不同的, ...
- UNP学习笔记2——从一个简单的ECHO程序分析TCP客户/服务器之间的通信
1 概述 编写一个简单的ECHO(回复)程序来分析TCP客户和服务器之间的通信流程,要求如下: 客户从标准输入读入一行文本,并发送给服务器 服务器从网络输入读取这个文本,并回复给客户 客户从网络输入读 ...
- runloop源代码
https://github.com/zzf073/runloopDemo /** * 调度例程 * 当将输入源安装到run loop后,调用这个协调调度例程,将源注册到客户端(可以理解为其他线程 ...
- IPv6特性,以及SLAAC过程
1. IPv6特性 支持即插即用: 路由器发现(Router Discovery):当一个节点连接到一个IPv6的链路上时,它能够发现本地的路由器,而不必借助动态主机配置协议(DHCP). 前缀发现( ...
- Codeforces Round #487 (Div. 2) C. A Mist of Florescence 构造
题意: 让你构造一个 n∗mn*mn∗m 矩阵,这个矩阵由 444 种字符填充构成,给定 444 个整数,即矩阵中每种字符构成的联通块个数,n,mn,mn,m 需要你自己定,但是不能超过505050. ...
- 在使用easyui datagrid在tab中遇到的问题
当切换tab时,数据加载了,但是table的宽和高不能不能够初始化. 郁闷了好久解决了这个问题: 在页面加载时和切换tab时,获取当前tab的名字,进行内容的初始化 $('a[name="m ...
- BZOJ 5180 [Baltic2016]Cities(斯坦纳树)
斯坦纳树的板子题. 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种. 最小生成树是在给定的点集和边中寻求最短网络使所有点连通. 而最小斯坦纳树允许在给定点外增加额外的点,使生成的最短网 ...
- 开放个人电脑端口[Windows]
先打开控制面板
- 集成spring boot + mysql + docker实战
前言 网上找过很多文章,关于通过docker构建mysql容器并将应用容器和docker容器关联起来的文章不多.本文将给出具体的范例.此处为项目的源码 前置条件 该教程要求在宿主机上配置了: dock ...