在PHP中使用cURL和x-www-form-urlencoded进行POST返回Access Denied

时间:2014-11-06 00:05:18

标签: php post curl

我已经能够使用chrome的高级休息客户端扩展将POST查询发送到特定的HTTPS服务器,我得到状态代码:200 - 确定使用与我在此代码中使用的相同的正文字段,但是当我运行以下代码我收到此响应:403 - 拒绝访问。

<?php
$postData = array(
'type' => 'credentials',
'id' => 'exampleid',
'secret_key' => 'gsdDe32dKa'
);

// Setup cURL
$ch = curl_init('https://www.mywebsite.com/oauth/token');
curl_setopt_array($ch, array(
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HTTPHEADER => array('Content-Type: application/x-www-form-urlencoded'
),
CURLOPT_POSTFIELDS => json_encode($postData)
));

// Send the request
$response = curl_exec($ch);

var_dump($response);

// Check for errors
if($response === FALSE){
die(curl_error($ch));
}

// Decode the response
$responseData = json_decode($response, TRUE);

// Print the date from the response
echo $responseData['published'];
?>

我也注意到当我使用Advanced Rest Client Extension进行chrome时,如果我将Content-Type设置为application / json,我必须输入一个我不知道的登录名和密码那些是因为即使我输入我在代码中的id和密钥,它返回401 Unauthorized。所以我猜测我写的这段代码并没有强迫它进入内容类型:application / x-www-form-urlencoded,但我不确定。感谢您对此问题的任何帮助!

1 个答案:

答案 0 :(得分:4)

你可以尝试这样做,看看它是否有帮助:

curl_setopt_array($ch, array(
    CURLOPT_POST => TRUE,
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_COOKIEFILE => 'cookie.txt',
    CURLOPT_COOKIEJAR => 'cookie.txt',
    CURLOPT_USERPWD => 'username:password', //Your credentials goes here
    CURLOPT_HTTPHEADER => array('Content-Type: application/x-www-form-urlencoded'),
    CURLOPT_POSTFIELDS => http_build_query($postData),
));

我想该网站希望在您已经提供的secret_key之上进行简单的身份验证 此外,还可以发送Cookie,以防万一最好存储它并在下一次Curl调用中再次使用它。