怎么用PHP发送HTTP请求(POST请求、GET请求)?
file_get_contents版本:
01 /**
02 * 发送post请求
03 * @param string $url 请求地址
04 * @param array $post_data post键值对数据
05 * @return string
06 */
07 function send_post($url, $post_data) {
08
09 $postdata = http_build_query($post_data);
10 $options = array(
11 'http' =>; array(
12 'method' =>; 'POST',
13 'header' =>; 'Content-type:application/x-www-form-urlencoded',
14 'content' =>; $postdata,
15 'timeout' =>; 15 * 60 // 超时时间(单位:s)
16 )
17 );
18 $context = stream_context_create($options);
19 $result = file_get_contents($url, false, $context);
20
21 return $result;
22 }
使用如下:
1 post_data = array(
2 'username' => 'stclair2201',
3 'password' => 'handan'
4 );
5 send_post('http://blog.snsgou.com', $post_data);
实战经验:
当我利用上述代码给另一台服务器发送http请求时,发现,如果服务器处理请求时间过长,本地的PHP会中断请求,即所谓的超时中断,第一个怀疑的是PHP本身执行时间的超过限制,但想想也不应该,因为老早就按照这篇文章设置了“PHP执行时间限制”(【推荐】PHP上传文件大小限制大全 ),仔细琢磨,想想,应该是http请求本身的一个时间限制,于是乎,就想到了怎么给http请求时间限制搞大一点。。。。。。查看PHP手册,果真有个参数 “ timeout ”,默认不知道多大,当把它的值设大一点,问题得已解决,弱弱地做个笔记~~~
Socket版本:
01 /**
02 * Socket版本
03 * 使用方法:
04 * $post_string = "app=socket&version=beta";
05 * request_by_socket('blog.snsgou.com', '/restServer.php', $post_string);
06 */
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:*/*");
16 fwrite($socket, "");
17 fwrite($socket, "mypost=$post_string");
18 fwrite($socket, "");
19 $header = "";
20 while ($str = trim(fgets($socket, 4096))) {
21 $header .= $str;
22 }
23
24 $data = "";
25 while (!feof($socket)) {
26 $data .= fgets($socket, 4096);
27 }
28
29 return $data;
30 }
Curl版本:
01 /**
02 * Curl版本
03 * 使用方法:
04 * $post_string = "app=request&version=beta";
05 * request_by_curl('http://blog.snsgou.com/restServer.php', $post_string);
06 */
07 function request_by_curl($remote_server, $post_string) {
08 $ch = curl_init();
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);
14 curl_close($ch);
15
16 return $data;
17 }
Curl版本(2)
01 /**
02 * 发送HTTP请求
03 *
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
11 * @return boolean
12 */
13 function send_request($url, $data, $refererUrl = '', $method = 'GET', $contentType = 'application/json', $timeout = 30, $proxy = false) {
14 $ch = null;
15 if('POST' === strtoupper($method)) {
16 $ch = curl_init($url);
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);
23 if ($refererUrl) {
24 curl_setopt($ch, CURLOPT_REFERER, $refererUrl);
25 }
26 if($contentType) {
27 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:'.$contentType));
28 }
29 if(is_string($data)){
30 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
31 } else {
32 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
33 }
34 } else if('GET' === strtoupper($method)) {
35 if(is_string($data)) {
36 $real_url = $url. (strpos($url, '?') === false ? '?' : ''). $data;
37 } else {
38 $real_url = $url. (strpos($url, '?') === false ? '?' : ''). http_build_query($data);
39 }
40
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);
46 if ($refererUrl) {
47 curl_setopt($ch, CURLOPT_REFERER, $refererUrl);
48 }
49 } else {
50 $args = func_get_args();
51 return false;
52 }
53
54 if($proxy) {
55 curl_setopt($ch, CURLOPT_PROXY, $proxy);
56 }
57 $ret = curl_exec($ch);
58 $info = curl_getinfo($ch);
59 $contents = array(
60 'httpInfo' => array(
61 'send' => $data,
62 'url' => $url,
63 'ret' => $ret,
64 'http' => $info,
65 )
66 );
67
68 curl_close($ch);
69 return $ret;
70 }
调用 WCF接口 的一个例子:$json = restRequest($r_url,'POST', json_encode($data));
怎么用PHP发送HTTP请求(POST请求、GET请求)?的更多相关文章
- HTTP 笔记与总结(1 )Telnet 分别发送 HTTP GET 和 HTTP POST 请求
简化的说: WebService = HTTP 协议 + XML Rest = HTTP 协议 + Json 各种 API = HTTP 协议 + XML / Json 来实现 HTTP 请求信息格式 ...
- 使用火狐的restclient发送http接口post及get请求
1.在firefox安装restclient插件,具体参照http://jingyan.baidu.com/article/1876c8529b07e3890b137623.html: —.发送pos ...
- 发送一个简单的http get 请求并且响应
问题 如何发送一个简单的HTTP GET请求并且取回相应的HTTP响应. 设计 创建一个WebClient类的实例,然后使用它的DownloadData()方法. 方案 string uri = &q ...
- 使用Ajax发送http请求(get&post请求)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 同步和异步 同步和异步的概念 同步:必须等待前面的任务完成,才能继续后面 ...
- requests(一): 发送一个json格式的post请求
今天给一位同学解决post发送数据格式为json格式的请求,顺便确认一下问题归属. 背景: 用postman工具发送一个数据格式为json的请求,得到了服务器的响应. 用python的requests ...
- Linux命令发送Http的get或post请求(curl和wget两种方法)
Http请求指的是客户端向服务器的请求消息,Http请求主要分为get或post两种,在Linux系统下可以用curl和wget命令来模拟Http的请求.下面就来介绍一下Linux系统如何模拟Http ...
- axios添加了header信息后发送的get请求自动编程option请求了
axios添加了header信息后发送的get请求自动编程option请求了 webpack 代理转发 Provisional headers are shown 在Vue中如何使用axios跨域访问 ...
- 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
本文转自http://www.cnblogs.com/davidwang456/p/4090058.html 感谢作者 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并 ...
- vue发送websocket请求和http post请求
直接上代码: pdf.vue <script> import SockJS from 'sockjs-client'; import Stomp from 'stompjs'; impor ...
- 使用 Promise 实现任务队列发送请求,实现最大请求数目限制
核心 设置最大请求数量,当前请求数量,待执行队列 调用时,创建一个新任务,然后判断是否达到最大请求数量,若达到则将任务追加到待执行队列,否则,则直接执行该任务.并返回Promise 创建任务时,需要返 ...
随机推荐
- 回去看linux的指令2
SYNC CL : MSM8953 @ CL#:12212299 PROJECT PATH : // Platform / N / NILE / COMBINATION / MSM8953 Cross ...
- C#取得控制台应用程序的根目录方法
如有雷同,不胜荣幸,若转载,请注明 取得控制台应用程序的根目录方法1:Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径2:AppDomain.Curren ...
- jquery源码解析:attr,prop,attrHooks,propHooks详解
我们先来看一下jQuery中有多少个方法是用来操作元素属性的. 首先,看一下实例方法: 然后,看下静态方法(工具方法): 静态方法是内部使用的,我们外面使用的很少,实例方法才是对外的. 接下来,我们来 ...
- 记一名软件实施自学转Java开发,附学习计划
2015年毕业到现在已经3年了,而我转型开发已经有一年的时间了.写这篇文章除了记录,主要还是想分享一些经历给想要转型开发的同学们,不要走那些我走过的弯路. 2015年入职了第一家公司,当时是做的分销系 ...
- IntelliJ IDEA中可以用Tab键跳出括号和引号吗?
在 Settings->Editor->General->Smart Keys 中勾选 Jump outside closing bracket/quote with Tab 即可.
- C#接口实现多态
我比较喜欢对感兴趣的理论进行反复的理解甚至理解背诵下来,接下来再复习一下什么叫多态(哈哈哈) 多态:在同一粒度视图下对相同类型的事物不做区别的统一操作 接下来看一下接口和引擎类是如何实现多态的: 一. ...
- 使用go写一个简单的exe文件
工作需要一个小工具给分析师用,原先打算写一个脚本的,但是呢我又不会用python,要写的话只能用java来实现(打包成可执行jar,使用java -jar 的命令来执行,当然得安装jdk).这种命令行 ...
- Openerp 修改 tree view 的列宽
在 tree 的后边添加自定义css 列:“my_class" 然后在对应的css文件中,添加样式: 保存,重新刷新页面即可.
- Linux快速查看某条命令的版本和存放的位置(ls -l `which mvn`)
输入: ls -l `which mvn` 如图:
- (转) Linux 内核运行参数修改——sysctl命令
原文:https://blog.csdn.net/u012707739/article/details/78254241 sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目 ...