如何使用PHP轻松发送POST请求并接收+解释JSON

时间:2012-07-31 23:25:49

标签: php json api post request

我正在使用Foursquare API,我需要向他们的服务器发出请求,以便以JSON格式接收访问令牌(https://developer.foursquare.com/overview/auth)。我如何使用PHP执行此操作?

我没有在网上找到任何明确的教程,这就是我在这里问的原因。我已经看到了一些与cURL有关的东西,我真的不明白,所以有什么简单的方法可以做到这一点吗?我在使用AJAX之前已经完成了它并且它非常自我解释,但它在PHP中看起来非常复杂,远远超过了它的外观:(

有人可以帮忙吗?感谢

2 个答案:

答案 0 :(得分:1)

<?php

# url_get_contents function by Andy Langton: http://andylangton.co.uk/

function url_get_contents($url,$useragent='cURL',$headers=false,$follow_redirects=false,$debug=false) {

# initialise the CURL library
$ch = curl_init();

# specify the URL to be retrieved
curl_setopt($ch, CURLOPT_URL,$url);

# we want to get the contents of the URL and store it in a variable
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

# specify the useragent: this is a required courtesy to site owners
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

# ignore SSL errors
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

# return headers as requested
if ($headers==true){
curl_setopt($ch, CURLOPT_HEADER,1);
}

# only return headers
if ($headers=='headers only') {
curl_setopt($ch, CURLOPT_NOBODY ,1);
}

# follow redirects - note this is disabled by default in most PHP installs from 4.4.4 up
if ($follow_redirects==true) {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
}

# if debugging, return an array with CURL's debug info and the URL contents
if ($debug==true) {
$result['contents']=curl_exec($ch);
$result['info']=curl_getinfo($ch);
}

# otherwise just return the contents as a variable
else $result=curl_exec($ch);

# free resources
curl_close($ch);

# send back the data
return $result;
}

?>

答案 1 :(得分:1)

好了,按照您提供的链接,试试这个:

重定向链接中的脚本(YOUR_REGISTERED_REDIRECT_URI)

if(isset($_GET['code']))
{
    $code = $_GET['code'];
    $url = "https://foursquare.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=$code";

    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_POST);

    $json = curl_exec($ch);

    var_dump($json);
}

注意:在阅读您提供的教程后,我没有看到任何对POST请求的引用,只有请求,所以您可以尝试这个(而不是cURL)

$json = file_get_contents($url);

如果这是一个简单的GET请求,那么file_get_contents可能会起作用。