怎么用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 创建任务时,需要返 ...
随机推荐
- django系列3.3--view视图函数, render, reverse(未完待续)
1.view视图函数 urls分发之后所用到的处理函数 2.render 用于渲染页面 在views.py中常用 from django.shortcuts import render, HttpRe ...
- Android Studion有用的快捷键
注释:ctrl+/ 如果代码未添加注释,则添加注释上去:否则取消已经注释. 格式化代码:ctrl+alt+L l键不需要大写锁定,这里只是为了更清楚表示是L键.
- JavaWeb -cookie&session&application
cookie&session&application总结 Cookie[key-value](不是内置对象必须new): 1. Cookie 是由服务端生成的,在发送给客户端保存 2. ...
- 代码审计就该这么来3 beescms getshell
本文作者:i春秋作家——索马里的海贼 前言上一回(http://bbs.ichunqiu.com/thread-13714-1-1.html)说到快速漏洞挖掘中的几个重点关注对象,命令执行,文件操作, ...
- bash脚本编程学习笔记(一)
bash脚本语言,不同于C/C++是一种解释性语言.即在执行前不需要事先转变为可执行的二进制代码,而是每次执行时经解释器解释后执行.bash脚本语言是命令的堆砌,即按照实际需要,结合命令流程机制实现的 ...
- 【UI组件】——用jQuery做一个上拉刷新
技术要点: 1.jQuery的插件写法 2.上拉刷新步骤分解 3.css样式 jQuery的插件写法: $.fn.pluginName = function() { return this.each( ...
- 永久激活navicat_premium12.0,支持win32和64位
1.下载软件以及注册机 链接:https://pan.baidu.com/s/1NGc6YLsgMQRQYEwnGSU16Q 提取码:guno 2.根据自己的电脑位数安装对应的软件,傻瓜式安全(注 ...
- java简单工厂设计模式
一.基本定义 /* *简单工厂设计模式: *文字描述理解: * 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式. * 通过专门定义一个类来负责创建其它类的实例,被创建的实例通常 * 都具有共同 ...
- 2016级算法第六次上机-G.ModricWang likes geometry
1116 ModricWang likes geometry 思路 难题,非常考察几何知识,放在这里作为计算几何场次的最难的题. 原题地址 原版题解 代码
- 配置bootstrap环境
bootstrap是一个优雅,灵活,可扩展的前端工具集,可搭建WEB页面的HTML,CSS,JavaScript工具集,最重要的是它的栅格系统. 这里不做更多的详细介绍具体可参照官方网站:http:/ ...