我正在开发我的REST client library for CodeIgniter,我正在努力研究如何在PHP语言中发送、放置和删除参数。
在一些地方,我看到人们使用这些选项:
$this->option(CURLOPT_PUT, TRUE);
$this->option(CURLOPT_POSTFIELDS, $params);
令人恼火的是,这似乎什么也没做。这是设置PUT参数的正确方式吗?
如果是,如何设置删除参数?
$this->option()是我的库的一部分,它只是构建一个CURLOPT_XX常量数组,并在执行构建的cURL请求时将它们发送给curl_setopt_array()。
我正在尝试使用以下代码读取PUT和DELETE参数:
case 'put':
// Set up out PUT variables
parse_str(file_get_contents('php://input'), $this->_put_args);
break;
case 'delete':
// Set up out PUT variables
parse_str(file_get_contents('php://input'), $this->_delete_args);
break;
这里有两个选择,我以错误的方式处理这个问题,或者在我的库中有一个bug。如果你能让我知道这在理论上是否可行,我可以继续调试,直到我解决了它。
我不想在一个根本错误的方法上浪费更多的时间。
发布于 2010-01-18 02:29:10
不使用CURLOPT_PUT = TRUE
,而是使用CURLOPT_CUSTOMREQUEST = 'PUT'
和CURLOPT_CUSTOMREQUEST = 'DELETE'
,然后使用CURLOPT_POSTFIELDS
设置值。
发布于 2011-05-09 11:02:56
下面是一些代码,可能对其他想要处理PUT和DELETE参数的人有帮助。您可以通过$GLOBALS[]
设置$_PUT
和$_DELETE
,但除非声明为global
或通过$GLOBALS[]
访问,否则无法在函数中直接访问它们。为了解决这个问题,我创建了一个简单的类来读取GET/POST/PUT/DELETE请求参数。这也会用PUT/DELETE参数填充$_REQUEST
。
这个类将解析PUT/DELETE参数并支持GET/POST。
class Params {
private $params = Array();
public function __construct() {
$this->_parseParams();
}
/**
* @brief Lookup request params
* @param string $name Name of the argument to lookup
* @param mixed $default Default value to return if argument is missing
* @returns The value from the GET/POST/PUT/DELETE value, or $default if not set
*/
public function get($name, $default = null) {
if (isset($this->params[$name])) {
return $this->params[$name];
} else {
return $default;
}
}
private function _parseParams() {
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "PUT" || $method == "DELETE") {
parse_str(file_get_contents('php://input'), $this->params);
$GLOBALS["_{$method}"] = $this->params;
// Add these request vars into _REQUEST, mimicing default behavior, PUT/DELETE will override existing COOKIE/GET vars
$_REQUEST = $this->params + $_REQUEST;
} else if ($method == "GET") {
$this->params = $_GET;
} else if ($method == "POST") {
$this->params = $_POST;
}
}
}
发布于 2010-01-18 01:35:07
我认为你混淆了你的动词- PUT是用来放文件的,POST是用来张贴变量的(虽然你也可以张贴文件)。
要设置post变量,请使用带有param1=val1¶m2=val2
字符串或关联数组的CURLOPT_POSTFIELDS
。
要执行删除操作,您需要使用curl选项CURLOPT_CUSTOMREQUEST
https://stackoverflow.com/questions/2081894
复制相似问题