需要有关PHP curl call

时间:2015-12-02 00:31:13

标签: php curl

您好:我正在尝试使用curl_init进行API调用;取得了一些进展,但似乎陷入困境......

我们有一个接口(swagger),它允许我们进行curl调用并测试它的工作原理:这里是curl命令:

curl -X POST --header "Content-Type: application/x-www-form-urlencoded" 
--header "Accept: application/json" 
--header "Authorization: Bearer xxxxx-xxxxxx- xxxxx-xxxxxxx" 
-d "username=xxxxxxxx39%40gmail.com&password=xxxx1234"        "http://xxxxxxxxx-xx-xx-201-115.compute-1.amazonaws.com:xxxx/api/users" 

这是我尝试在PHP代码中执行相同的调用:

$json = '{
"username": "xmanxxxxxx%40gmail.com",
"password": "xxxx1234"
}';


  $gtoken='xxxxxx-xxxxxx-xxx-xxxxxxxx';

$token_string="Authorization: Bearer ".$gtoken;


$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://exx-ccc-vvv-vvvv.compute-1.amazonaws.com:xxxx/api/users', //URL to the API
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $json,
CURLOPT_HEADER => true, // Instead of the "-i" flag
CURLOPT_HTTPHEADER => array('Content-Type: application/x-www-form-urlencoded','Accept: application/json',$token_string) 

));

curl_setopt($curl,CURLOPT_RETURNTRANSFER,TRUE);

$resp = curl_exec($curl);
curl_close($curl); 

我收到了回复码" 500"这让我觉得我的输入有问题。所以我想知道是否有人可以帮助解决这个问题......

1 个答案:

答案 0 :(得分:2)

在命令行代码中,使用-d "username=xxxxxxxx39%40gmail.com&password=xxxx1234"发布标准URL编码数据字符串,但在PHP中,您创建了一个JSON字符串并将其作为单个帖子字段发送(未正确进行URL编码)。

我认为这就是你所需要的:

$data = array(
    'username' => 'xmanxxxxxx@gmail.com',
    'password' => 'xxxx1234',
);

$data = http_build_query($data); // convert array to urlencoded string

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

据我所知,其余的代码看起来很好。

此外,您没有明确需要设置Content-Type标头,当您将字符串传递给CURLOPT_POSTFIELDS时,cURL会为您执行此操作。如果将数组传递给multipart/form-data,它会将其设置为CURLOPT_POSTFIELDS。但拥有它也不会伤害任何东西。