可用
function callInterfaceCommon($URL, $type, $params, $headers){
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $URL); //接口地址
if($headers!=""){
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
}else {
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Content-type:application/json;charset=utf-8"));
}
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
switch ($type){
case "GET" : curl_setopt($ch, CURLOPT_HTTPGET, true);break;
case "POST": curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);break;
case "PUT" : curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);break;
case "DELETE":curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);break;
}
$file_contents = curl_exec($ch);//获得返回值
curl_close($ch);
return $file_contents;
}
// $params="{user:\"admin\",pwd:\"admin\"}";
$params = '{"status":"1"}';
$headers = array('Content-type: application/json');
//$url= $GLOBALS["serviceUrl"]."/user";
$strResult = callInterfaceCommon($putApi, "PUT", $params);
var_dump($strResult);
-----------------------------------------
to create variable such as $_GET, $_POST use
that solution
<?php
$_SERVER['REQUEST_METHOD']==="PUT" ? parse_str(file_get_contents('php://input', false , null, -1 , $_SERVER['CONTENT_LENGTH'] ), $_PUT): $_PUT=array();
?>
PHP中模拟处理HTTP PUT请求的例子
有关HTTP PUT详细介绍,请参考文章:http://www./article/23432.html
PHP里有$_GET,$_POST,但是没有$_PUT,所以如果需要使用,则需要自己模拟一下:
if ('PUT' == $_SERVER['REQUEST_METHOD']) {
parse_str(file_get_contents('php://input'), $_PUT);
}
通过php://input得到的数据是raw data,所以需要用parse_str解析一下。
说明,当表单是enctype="multipart/form-data"类型的时候(就是上传文件那种类型),这种方法是无效的(此时 php://input为空),一旦PHP发现请求的Content-Type是multipart/form-data,就会无条件的代你处理表单数 据,然后保存到$_FILES里,此时无法得到raw data,只能用一些偏门方法。
以apache为例,修改httpd.conf(为了使用RequestHeader语法,请先激活header模块):
<?php
function
curlrequest(
$url
,
$data
,
$method
=
'post'
){
$ch
= curl_init();
//初始化CURL句柄
curl_setopt(
$ch
, CURLOPT_URL,
$url
);
//设置请求的URL
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER,1);
//设为TRUE把curl_exec()结果转化为字串,而不是直接输出
curl_setopt(
$ch
, CURLOPT_CUSTOMREQUEST,
$method
);
//设置请求方式
curl_setopt(
$ch
,CURLOPT_HTTPHEADER,
array
(
"X-HTTP-Method-Override: $method"
));
//设置HTTP头信息
curl_setopt(
$ch
, CURLOPT_POSTFIELDS,
$data
);
//设置提交的字符串
$document
= curl_exec(
$ch
);
//执行预定义的CURL
if
(!curl_errno(
$ch
)){
$info
= curl_getinfo(
$ch
);
echo
'Took '
.
$info
[
'total_time'
] .
' seconds to send a request to '
.
$info
[
'url'
];
}
else
{
echo
'Curl error: '
. curl_error(
$ch
);
}
curl_close(
$ch
);
return
$document
;
}
$url
=
'http://localhost/test/curl.php'
;
$data
=
"request from put method"
;
$return
= curlrequest(
$url
,
$data
,
'put'
);
var_dump(
$return
);
exit
;
?>
function curlPut()
{
//PUT
$curl_handle = curl_init ();
// Set default options.
curl_setopt ( $curl_handle, CURLOPT_URL, 'http://my.focus.cn/test/socket.php');
curl_setopt ( $curl_handle, CURLOPT_FILETIME, true );
curl_setopt ( $curl_handle, CURLOPT_FRESH_CONNECT, false );
curl_setopt ( $curl_handle, CURLOPT_HEADER, true );
curl_setopt ( $curl_handle, CURLOPT_RETURNTRANSFER, true );
curl_setopt ( $curl_handle, CURLOPT_TIMEOUT, 5184000 );
curl_setopt ( $curl_handle, CURLOPT_CONNECTTIMEOUT, 120 );
curl_setopt ( $curl_handle, CURLOPT_NOSIGNAL, true );
curl_setopt ( $curl_handle, CURLOPT_HEADER, true );
curl_setopt ( $curl_handle, CURLOPT_CUSTOMREQUEST, 'PUT' );
$aHeader[] = "Content-Type:text/xml;charset=UTF-8";
$aHeader[] = "x-bs-ad:private";
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $aHeader);
$file = 'client.php';
$file_size = filesize($file);
$h = fopen($file,'r');
curl_setopt ( $curl_handle, CURLOPT_INFILESIZE, $file_size);
curl_setopt ( $curl_handle, CURLOPT_INFILE, $h);
curl_setopt ( $curl_handle, CURLOPT_UPLOAD, true );
$ret = curl_exec ( $curl_handle );
print_r($ret);
}
$data = '{"status":"0"}';
$return = curlrequest($putApi, $data, 'put');
var_dump($return);
exit;
// header('Content-type:application/json;charset=utf-8');
// header('Access-Control-Allow-Origin: *');
// header('Access-Control-Allow-Credentials: true');
// header('Access-Control-Allow-Methods: GET,POST');