使用Curl Php (POST方法)登录


Login using Curl Php (POST method)

大家好!我有一个登录表单,其中有邮件id和密码,在提交它应该调用api返回生成一个认证令牌。我在Php curl中使用POST方法,但得到以下错误。

Apache Tomcat/6.0.36 -错误报告.. 一些HTML样式…服务器拒绝此请求,因为请求实体的格式不被请求方法

的请求资源所支持。

这是我的ajax调用..

function callapi()
{ 
data = new Object();
var email= document.getElementById("input01").value;
var pwd=document.getElementById("input02").value;
if(email != ""&& pwd != "")
{
data.Email = email;
data.Pwd = pwd;
}
jQuery.ajax({ 
  url: "http://localhost/stackato/nlogin.php",
  type: "POST",
  dataType:"json",
  data:data,
  error: function (data) {
   alert('error--'+data);
  },
  success: function (data) { 
if(data=="invalid")
{
}
else
{
window.location.href="finalstackatolists1.html";
}

}
});
}

这是我的curl PHP页面

<?php
header('Content-type: application/json');
$url = $_SERVER['REQUEST_URI'];
$scriptname = $_SERVER['SCRIPT_NAME']; 
$queryString = $_SERVER['QUERY_STRING'];
$mail=$_POST["Email"];
$pwd=$_POST["Pwd"];
$action = $_POST["action"];

$nurl = str_replace($scriptname,"...the api...",$url);


//open connection
$ch = curl_init(); 
$data = array("username" => $mail, "password" => $pwd);                                                                    
$req_data = json_encode($data);  
curl_setopt($ch, CURLOPT_URL, $nurl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req_data);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

 //execute post
if( ! $result = curl_exec($ch)) {
    die(curl_error($ch));
    curl_close($ch);
}
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) == '500')
{
    header("Status: 500 Server Error");
}
curl_close($ch);

echo $result;

?>

(我在REST-Client中尝试过,令牌已经生成)

请帮我解决这个问题。

您必须指定发布的数据类型为JSON

将这行添加到您的curl代码

curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: application/json"));