发送POST请求

和GET方法一样,POST方法也是HTTP协议中的一个重要组成部分。POST方法一般用来向目的服务器发出请求,并附有请求实体。
POST被设计成用统一的方法实现下列功能:
     o 对现有资源的注释(Annotation of existing resources);
     o 向电子公告栏、新闻组,邮件列表或类似讨论组发送消息;
     o 提交数据块,如将表格(form)的结果提交给数据处理过程;
     o 通过附加操作来扩展数据库。
     o 也可用来上传文件。
在所有的HTTP的POST请求中,必须指定合法的内容长度(Content-Length)。
如果HTTP/1.0服务器在接收到请求消息内容时无法确定其长度,就会返回400(非法请求)代码。
应用程序不能缓存对POST请求的回应,因为做为应用程序来说,它们没有办法知道服务器在未来的请求中将如何回应。
POST方式和GET方法的最大区别就是把发送的数据和URI地址分离。请求参数是在http标题的一个不同部分(名为entity body)传输的,这一部分用来传输表单信息,因此必须将Content-type设置为:application/x-www-form- urlencoded
Post请求格式如下:
POST /login.asp HTTP/1.1
Accept: */*
Referer: http://www.wantsoft.com
Accept-Language: zh-cn,en-us;q=0.5
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
Host: www.wantsoft.com
Content-Length: 35
Pragma: no-cache
Cache-Control: no-cache
username=wantsoft&password=password   //post的数据

php的post请求的sample如下:
   1: <;?php
   2:   $srv_ip = '127.0.0.1';//你的目标服务地址或频道.
   3:   $srv_port = 80;
   4:   $url = '/helloworld/?r=helloworld'; //接收你post的URL具体地址 
   5:   $fp = '';
   6:   $resp_str = '';
   7:   $errno = 0;
   8:   $errstr = '';
   9:   $timeout = 10;
  10:   $post_str = "username=demo&str=aaaa";//要提交的内容.
  11:   
  12:   //echo $url_str;
  13:   if ($srv_ip == ''){
  14:    echo('ip or dest url empty<;br>');
  15:   }
  16:   //echo($srv_ip);
  17:   $fp = fsockopen($srv_ip,$srv_port,$errno,$errstr,$timeout);
  18:   if (!$fp){
  19:    echo('fp fail');
  20:   }
  21:   $content_length = strlen($post_str);
  22:   $post_header = "POST $url HTTP/1.1\r\n";
  23:   $post_header .= "Content-Type: application/x-www-form-urlencoded\r\n";
  24:   $post_header .= "User-Agent: MSIE\r\n";
  25:   $post_header .= "Host: ".$srv_ip."\r\n";
  26:   $post_header .= "Content-Length: ".$content_length."\r\n";
  27:   $post_header .= "Connection: close\r\n\r\n";
  28:   $post_header .= $post_str."\r\n\r\n";
  29:   fwrite($fp,$post_header);
  30:   while(!feof($fp)){
  31:    $resp_str .= fgets($fp,512);//返回值放入$resp_str
  32:   }
  33:   fclose($fp);
  34:   echo($resp_str);//处理返回值.
  35:   //unset ($resp_str);
  36: ?>

获取POST请求

一般我们都用$_POST或$_REQUEST两个预定义变量来接收POST提交的数据。但如果提交的数据没有变量名,而是直接的字符串,则需要使用其他的方式来接收。

方法一: 使用全局变量$GLOBALS['HTTP_RAW_POST_DATA']来获取。

在$GLOBALS['HTTP_RAW_POST_DATA']存放的是POST过来的原始数据。而$_POST或$_REQUEST存放的是PHP以key=>value的形式格式化以后的数据。 但$GLOBALS['HTTP_RAW_POST_DATA']中是否保存POST过来的数据取决于centent-Type的设置,即POST数据时必须显式示指明Content-Type: application/x-www-form-urlencoded,POST的数据才会存放到 $GLOBALS['HTTP_RAW_POST_DATA']中。(该部分需要php.ini中设置 always_populate_raw_post_data = On 才能行的通)

方法二: 使用file_get_contents("php://input")来获取。

对于未指定 Content-Type 的POST数据,则可以使用file_get_contents("php://input");来获取原始数据。事实上,用PHP接收POST的任何数据都可以使用本方法。而不用考虑Content-Type,包括二进制文件流也可以。 所以用方法二是最保险的方法。

   1: echo "<br> Post Data is :<br>";
   2:   foreach($_POST as $key=>$val)
   3:   {
   4:       echo "key:$key,val:$val<br>";
   5:   }
   6:   
   7:   $data = file_get_contents("php://input");
   8:   echo $data.'<br>';
   9:   echo $GLOBALS['HTTP_RAW_POST_DATA'];

结果如下:

转载于:https://www.cnblogs.com/lovemdx/archive/2013/03/13/2957784.html

PHP 发送HTTP post请求发送和获取相关推荐

  1. java发送post请求json格式_Linux QT 4G发送HTTP POST请求发送JSON格式的数据

    一.在PC Window(QT5版本) 1.1.构建URL 1.2.构建HTTP请求头 1.3.连接信号与操作,接收服务器回复的消息 槽函数这里我们要在头文件定义,然后把处理过程实现. void Ma ...

  2. Linux QT 4G发送HTTP POST请求发送JSON格式的数据

    接上一篇文章:Linux下4G模块高新兴物联中兴ME3630拨号上网 4G网络打通以后,接下来就可以上传和接收数据啦!有点小兴奋! 我们来看看QT上如何来发送一个HTTP的POST请求. HTTP协议 ...

  3. ARP原理概述——基于WinPcap发送ARP请求数据包获取远程MAC地址

    ARP原理概述--基于WinPcap发送ARP请求数据包获取远程MAC地址 ARP协议 ARP概述 ARP工作原理 ARP数据包格式 编写程序发送ARP请求获取本机和远程IP的MAC 注意: ARP协 ...

  4. Android向EasyN摄像头发送http get请求获取媒体数据响应包

    一.描述 Android实现获取网络摄像头的视频流并且播放,以便实现手机实时监控. 网络摄像头:EsayN(普顺达). 网络:内网.外网应该也也一样,没有测试. 协议文档:ip Camera视音频访问 ...

  5. python3网络请求_使用Python3和请求发送XMLHttpRequest并获取响应

    我在浏览器中打开DevTools,可以看到需要的请求. Request info 我的代码:import requests url = 'https://www.docavenue.com/elast ...

  6. 发起一个ajax请求,发送ajax请求

    发送ajax请求 vue本身不支持发送ajax请求,需要使用vue-resourc axios等插件实现,建议使用axios axios是一个基于promise的http请求客户端,用来发送请求 基本 ...

  7. android http通过post请求发送一个xml

    今天,简单讲讲android如何在网络请求时通过post方式发送xml数据. 其实也很简单,不过我之前对网络请求这一块不太熟悉,当需要做这个发送xml数据时,居然不知道怎么做.后来,在网上查找资料,最 ...

  8. postman发送object_.NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部...

    奇怪的问题 最近在公司有个系统需要调用第三方的一个webservice.本来调用一个下很简单的事情,使用HttpClient构造一个SOAP请求发送出去拿到XML解析就是了. 可奇怪的是我们的请求在运 ...

  9. java发送get post请求_【工具】java发送GET、POST请求

    前项目使用这种HTTP的方式进行数据交互,目前已更换数据交互方式,但是作为接口提供调用来说还是比较简洁高效的: 总体流程就是: 1.发送HTTP请求 2.获取返回的JSON对象 3.JSON转换 pa ...

最新文章

  1. python 通过title判断_利用Python模拟GitHub登录
  2. 2020-03-21
  3. SparkSQL愿景
  4. 怎么用计算机弹是你,抖音带你去旅行怎么用计算器弹奏_抖音带你去旅行计算器乐谱_管理资源吧...
  5. 苹果公司官方证实,iPhone12延期!
  6. Python数据结构实战——双向链表(DoublyLinkedList)
  7. python是什么意思啊-星号*在Python中是什么意思?
  8. Android 扩展ViewFlipper做导航页(一)
  9. Perhaps you should add the directory containing libpcre.pc to the PKG_CONFIG_PATH
  10. 2019年美赛获奖分享经验
  11. 图像检索:颜色聚合向量(CCV)及matlab实现
  12. java scanner close_Java Scanner close()方法
  13. 利用计算机教室教师培训记录表,新学期教师计算机培训方案
  14. 陆奇最新演讲高清PPT下载;AI 绘画20+工具体验汇总;我愿称MOSS为全球开源界最强;思否AIGC黑客马拉松北京站 | ShowMeAI日报
  15. spring boot电商系统前端界面设计与浏览器兼容性研究 毕业设计-附源码231058
  16. 【剧透高亮】最最最完整剧透加剧情详细解析
  17. 将字符串形式的日期转换成日期对象
  18. 科研小技巧——MATLAB的编码风格
  19. 天龙八部GridInfo读取源码
  20. Web前端面试之JavaScript典型面试题及答案

热门文章

  1. Web开发中实用小工具
  2. 计算机组成材质,计算机组成原理及应用期末复习材料
  3. java web环境配置_JAVA Web开发环境配置
  4. 量子计算计算机简史pdf,量子计算及其潜在应用.pdf
  5. c语言通讯录程序线性表,数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)...
  6. java 声波 噪音过滤_攻略||让噪音一边去的隔音材料全解析!
  7. android插件数字,Android自定义控件实现带文本与数字的圆形进度条
  8. windows更改pip源_windows环境下 更换pip镜像源
  9. java selenium firefox启动报错大调查
  10. Simpy练习案例(一):基本线性流程仿真