近期用restserver遇到个蛋疼的问题,发现$this->put得到的參数都是null。查了一下发现。这貌似这个普遍问题,參见链接:https://github.com/chriskacerguis/codeigniter-restserver/issues/362

还是先来看下官方的解释:參见 http://code.tutsplus.com/tutorials/working-with-restful-services-in-codeigniter-2--net-8814

  1. $this->put()
  2.  
  3. Reads in PUT arguments set in the HTTP headers or via cURL.

即该函数能够读取通过cURL訪问时携带的put參数,或者在http headers里的參数。

可是经过測试,即便參数放headers里。$this->put()也訪问不到,其根本原因可能是在源代码上某个地方给屏蔽了。

杂家临时也没找到解决的根本方法,但下面两种能够临时解决这个问题:

1。与post保持一致,仍然在body里传參数。

在基类里写个函数:

  1. public function getPut($key){
  2. return $this->input->input_stream($key);
  3. }

client訪问的时候正常传參数在body里。就ok了。注意此时通过$this->post()是得不到參数的。必须从input_stream里取。上述函数支持多字段同一时候取,如:

  1. $data = $this->getPut(array('tel', 'name', 'addr'));

事实上CI里从input出来的函数应该都支持多字段同一时候取,但Restserver的this->get() post()却不支持。

补充:当把參数放body里时。直接用$this->put()就能够获得到相应字段了,文档说是在headers,实际是在body里!但$this->put()不支持多字段,故上述函数还是有意义的。


$this->delete()也有这个问题,读不到headers里的參数,但能读到body里的!

!!

2。參数在header里传,基类里写个函数:

  1. /**
  2. * 获得key相应的header
  3. * @param $key
  4. * @return mixed
  5. */
  6. public function getHeader($key){
  7. return $this->input->get_request_header($key, TRUE);
  8. }

个人推荐第一种哈。參数在body里传!

能依照http规矩来最好,header里不要烂用。

ps:restserver里put获得不到參数的问题跟Content-Type:application/json 这个设置无关。

------欢迎大家增加PHP CodeIgniter社区群:460132647

CodeIgniter RestServer中put请求获取不到參数的问题解决的更多相关文章

  1. 关于HttpClient模拟浏览器请求的參数乱码问题解决方式

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44407297 http://www.llwjy.com/blogdetail/9 ...

  2. 获取Oracle隐含參数信息

    Oracle数据库的初始化參数.主要来源于两个Oracle内部数据字典表:X$KSPPCV和X$KSPPI通常我们查询的V$Parameter视图或使用show parameter命令都是就来源于这两 ...

  3. .NET CORE API 使用Postman中Post请求获取不到传参问题

    开发中遇到个坑 记录下. 使用Postman请求core api 接口时,按之前的使用方法(form-data , x-www-form-urlencoded)怎么设置都无法访问. 最后采用raw写入 ...

  4. ajax请求获取的数据无法赋值给全局变量问题总结

    一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数 ...

  5. C++ 中获取 可变形參函数中的參数

    #include <iostream> #include <stdarg.h> using namespace std; int ArgFunc(const char * st ...

  6. jQuery.ajax()方法中參数具体解析

    前言 在项目开发中,为了实现异步向服务端发起请求,最常常使用的就是jQuery.ajax方法了.刚開始需求比較简单,调用jQuery.ajax方法时要传的參数也就那几个常见的參数:url/data/d ...

  7. Ngnix中的fastcgi參数性能优化和解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luozhonghua2014/article/details/37737823 优化性能參数设置,在 ...

  8. C中參数个数可变的函数

    一.什么是可变參数 我们在C语言编程中有时会遇到一些參数个数可变的函数,比如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一 ...

  9. springMVC --@RequestParam注解(后台控制器获取參数)

    在SpringMVC后台控制层获取參数的方式主要有两种,一种是request.getParameter("name"),第二种是用注解@RequestParam直接获取. 1.获取 ...

随机推荐

  1. B4. Concurrent JVM 锁机制(synchronized)

    [概述] JVM 通过 synchronized 关键字提供锁,用于在线程同步中保证线程安全. [synchronized 实现原理] synchronized 可以用于代码块或者方法中,产生同步代码 ...

  2. 面试之Linux

    Linux的体系结构 体系结构主要分为用户态(用户上层活动)和内核态 内核:本质是一段管理计算机硬件设备的程序 系统调用:内核的访问接口,是一种不能再简化的操作 公用函数库:系统调用的组合拳 Shel ...

  3. IDEA打war包部署本地TOMCAT测试

    在Eclipse中打war包很方便,导出即可直接选择war包,如下图所示: 但是在IDEA中有点麻烦,网上很多教程,做的也都很好,我自己也做一份,加深一下印象. 首先打开File->Projec ...

  4. Windows下Eclipse+PyDev安装Python开发环境

    .简介 Eclipse是一款基于Java的可扩展开发平台.其官方下载中包括J2EE方向版本.Java方向版本.C/C++方向版本.移动应用方向版本等诸多版本.除此之外,Eclipse还可以通过安装插件 ...

  5. 集训第五周动态规划 J题 括号匹配

    Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...

  6. os系统安装Python虚拟环境virtualenv和virtualenvwrapper

    一.安装Python 上节已经讲了如何安装Python2和Python3 二.给Python3安装virtualenv 在终端输入:sudo pip3 install virtualenv 等待安装成 ...

  7. About SQL Server 2016 CPT2

    SQL Server 2016 CTP2已经发布,可以从以下主页进行下载. http://www.microsoft.com/en-us/server-cloud/products/sql-serve ...

  8. 九度oj 题目1061:成绩排序

    题目1061:成绩排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:24473 解决:6960 题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排 ...

  9. MVC系统学习5——验证

    其实关于Mvc的验证在上一篇已经有讲过一些了,可以通过在我们定义的Model上面添加相应的System.ComponentModel.DataAnnotations空间下的验证属性.在服务器端通过Mo ...

  10. 转盘抽奖 canvas & 抽奖 H5 源码

    转盘抽奖 canvas https://github.com/givebest/wechat-turntalbe-canvas https://blog.givebest.cn/GB-canvas-t ...