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请求)?的更多相关文章

  1. HTTP 笔记与总结(1 )Telnet 分别发送 HTTP GET 和 HTTP POST 请求

    简化的说: WebService = HTTP 协议 + XML Rest = HTTP 协议 + Json 各种 API = HTTP 协议 + XML / Json 来实现 HTTP 请求信息格式 ...

  2. 使用火狐的restclient发送http接口post及get请求

    1.在firefox安装restclient插件,具体参照http://jingyan.baidu.com/article/1876c8529b07e3890b137623.html: —.发送pos ...

  3. 发送一个简单的http get 请求并且响应

    问题 如何发送一个简单的HTTP GET请求并且取回相应的HTTP响应. 设计 创建一个WebClient类的实例,然后使用它的DownloadData()方法. 方案 string uri = &q ...

  4. 使用Ajax发送http请求(get&post请求)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 同步和异步 同步和异步的概念 同步:必须等待前面的任务完成,才能继续后面 ...

  5. requests(一): 发送一个json格式的post请求

    今天给一位同学解决post发送数据格式为json格式的请求,顺便确认一下问题归属. 背景: 用postman工具发送一个数据格式为json的请求,得到了服务器的响应. 用python的requests ...

  6. Linux命令发送Http的get或post请求(curl和wget两种方法)

    Http请求指的是客户端向服务器的请求消息,Http请求主要分为get或post两种,在Linux系统下可以用curl和wget命令来模拟Http的请求.下面就来介绍一下Linux系统如何模拟Http ...

  7. axios添加了header信息后发送的get请求自动编程option请求了

    axios添加了header信息后发送的get请求自动编程option请求了 webpack 代理转发 Provisional headers are shown 在Vue中如何使用axios跨域访问 ...

  8. 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。

    本文转自http://www.cnblogs.com/davidwang456/p/4090058.html 感谢作者 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并 ...

  9. vue发送websocket请求和http post请求

    直接上代码: pdf.vue <script> import SockJS from 'sockjs-client'; import Stomp from 'stompjs'; impor ...

  10. 使用 Promise 实现任务队列发送请求,实现最大请求数目限制

    核心 设置最大请求数量,当前请求数量,待执行队列 调用时,创建一个新任务,然后判断是否达到最大请求数量,若达到则将任务追加到待执行队列,否则,则直接执行该任务.并返回Promise 创建任务时,需要返 ...

随机推荐

  1. 【题解】 AGC029-A Irreversible operation

    传送门 定位:思维好题. 考虑无论如何每一个W都会和前面的B在一起交换一次,所以直接求和就好了. 注意long long的使用. #include<stdio.h> #include< ...

  2. Robolectric 单元测试中使用 Ressource

    单元测试类中: @RunWith(RobolectricGradleTestRunner.class) @Config(constants=BuildConfig.class, sdk = 21) 获 ...

  3. LWIP

    LWIP 今天要谈的不是LWIP协议栈的内容,只是简单谈谈关于STM32F407快速使用LWIP做网络通讯的一些经历. 我是一个网络小白,对网络知识一窍不通,仅仅是知道有IP地址.网关这玩意,也从来没 ...

  4. leecode刷题(21)-- 删除链表的倒数第N个节点

    leecode刷题(21)-- 删除链表的倒数第N个节点 删除链表的倒数第N个节点 描述: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2- ...

  5. 【bug】—— H5页面在 ios 端滑动不流畅的问题

    IOS系统的惯性滑动效果非常6,但是当我们对div加overflow-y:auto;后是不会出这个效果的,滑动的时候会感觉很生涩.怎么办? 方案一: 在滚动容器内加-webkit-overflow-s ...

  6. python 全栈开发:逻辑运算

    基础运算符 逻辑运算: 优先级:()> not > and >or 数字转bool值,0为False,非零的数字为True. 1. print(2 > 1 and 1 < ...

  7. js 实现星级评分

    最近的项目中有一个星级评分的需求,  自己就写了一下, 由于可能一个页面要用到多个,就采用了面向对象的写法. 用到的png图片也放到这里.    js要用到jquery. css: .sr-star{ ...

  8. 'qt_sql_default_connection' is still in use

    出现这个告警是因为打开了多个db而没有及时关闭,网上搜了答案是使用完了执行 QSqlDatabase::removeDatabase(m_connectionName); 泄漏的问题有所改善,但点快了 ...

  9. Q64 最小路径和

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5,1], ...

  10. Mac 10.12安装飞鸽传书IPMessager

    说明:这个版本的飞鸽传书不能和Linux的互通,但是可以和Windows的互通,我猜测是协议问题:如果想要互通只能是Mac和Linux同时安装iptux. 下载: (链接: https://pan.b ...