CodeIgniter RestServer中put请求获取不到参数的问题解决

最近用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

$this->put()

Reads in PUT arguments set in the HTTP headers or via cURL.

即该函数可以读取通过cURL访问时携带的put参数,或者在http headers里的参数。但是经过测试,即便参数放headers里,$this->put()也访问不到,其根本原因可能是在源码上某个地方给屏蔽了。杂家暂时也没找到解决的根本方法,但以下两种可以暂时解决问题:

1,与post保持一致,仍然在body里传参数。在基类里写个函数:

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

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

$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里传,基类里写个函数:

    /**
     * 获得key对应的header
     * @param $key
     * @return mixed
     */
    public function getHeader($key){
        return $this->input->get_request_header($key, TRUE);
    }

个人推荐第一种哈,参数在body里传!能按照http规矩来最好,header里不要烂用。

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

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

时间: 2024-10-05 08:24:02

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

CodeIgniter RestServer中put请求获取不到參数的问题解决

近期用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 $this->

Angular中通过$location获取地址栏的参数详解

Angular中通过$location获取url中的参数 最近,项目开发正在进行时,心有点燥,许多东西没来得及去研究,今天正想问题呢,同事问到如何获取url中的参数,我一时半会还真没想起来,刚刚特意研究了一下,常用的方法就以下几种: 1.获取当前完整的url路径 var absurl = $location.absUrl();     //http://88:8100/#/homePage?id=10&a=100 2. 获取当前url路径(当前url#后面的内容,包括参数和哈希值) var ur

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

开发中遇到个坑 记录下. 使用Postman请求core api 接口时,按之前的使用方法(form-data , x-www-form-urlencoded)怎么设置都无法访问. 最后采用raw写入json数据,同时将Content-Type 设置为 application/json,终于请求成功. 后端代码(使用[FromBody]接收): // POST: api/Login [HttpPost] public ActionResult<string> Post([FromBody] A

微信小程序 post 请求获取不到参数原因

如果使用post 请求一定要加上 header: { "content-type": "application/x-www-form-urlencoded" }  ,如果不加,data 中的参数在后端获取不到 wx.request({ header: { "content-type": "application/x-www-form-urlencoded" }, method: "POST", url: a

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

一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数据,除了详情页面被加载之后需要向服务器发送ajax请求,在详情页面还有几个表单控件的属性需要去请求服务器获取实际项目中要求要显示的数据. 如下代码,直接在ajax请求中改变表单控件的值,避开了给全局变量赋值. 给全局变量赋值的解决办法,给ajax请求设置async为false,表示请求为同步请求:

html页面通过ajax请求获取session中的值

在利用springboot进行web开发时,遇到这样一个问题:html如何获取session中的值,实现用户登录系统后首页展示xx欢迎您. 也就是需要实现html通过ajax请求获取session中的值. 1.登录页面 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <meta charset="utf-8"> <meta http-equiv=&quo

自动化接口测试平台:从excel读取数据,传递到request请求中获取不到参数问题

遇到一个问题,将入参的必填参数按照dict格式填入excel表格中,从excel读取数据传递到request请求一直获取不到参数 解决: 1.注意从excel中读取的数据格式为str,传递到request请求的参数格式要求为dict 2.需要将数据反序列化,有以下两种方法: request.post对于参数传入的格式有特殊要求:post请求是我们常说的提交表单,表单的数据内容就是post请求的参数,request实现post请求需设置请求参数data,数据格式 可以为字典.元组.列表和json格

MVC之前的那点事儿系列(9):MVC如何在Pipeline中接管请求的?(转载)

MVC之前的那点事儿系列(9):MVC如何在Pipeline中接管请求的? 文章内容 上个章节我们讲到了,可以在HttpModules初始化之前动态添加Route的方式来自定义自己的HttpHandler,最终接管请求的,那MVC是这么实现的么?本章节我们就来分析一下相关的MVC源码来验证一下我们的这个问题. 先创建一个MVC3的Web Application,选择默认的模板以便创建以后就默认包含HomeController和AccountController.我们知道MVC要先接管请求才能通过

django中HttpRequest请求

视图的第一个参数必须是HttpRequest对象 在视图函数中,接收的request有如下属性: path:一个字符串,表示请求的页面的完整路径,不包含域名. method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'.'POST'. 在浏览器中给出地址发出请求采用get方式,如超链接. 在浏览器中点击表单的提交按钮发起请求,如果表单的method设置为post则为post请求. encoding:一个字符串,表示提交的数据的编码方式. 如果为None则表示使用浏览器的默认设置