PHP Curl请求Stackoverflow API

时间:2015-12-06 06:24:30

标签: php api curl stackexchange-api

我试图在PHP中使用$curl来访问stackoverflow api以获取基本信息。我查看了文档,并且我尝试了大约一百种标题和curl_setopt命令的组合,没有任何内容可以正确返回。有人用PHP中的curl来访问stackoverflow API吗?你用什么参数来完成这个?

这是我现在的工作,请注意,您可以看到我已尝试过的curl请求组合的注释工作:

$stack_url = 'https://api.stackexchange.com/2.2/info?site=stackoverflow&key=';

$header[]   = "Accept:application/json";
// $header[]    = "Accept-Encoding:gzip, deflate";
// $header[]    = "Cache-Control:cache";
// $header[]    = "Cache-Control:no-cache";
// $header[]    = "Accept-Language:en-US,en;q=0.5";
$header[]   = "Content-Length: 1000";
$header[]   = "Content-Type:application/json";
// $header[]    = "Cookie:23";
// $header[]    = "X-Requested-With:XMLHttpRequest";

// here we curl request to amazon no matter what
$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $stack_url);

// the needed settings for this curl request
// curl_setopt( $curl, CURLOPT_HEADER, 1 );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_HTTPHEADER, $header);
// curl_setopt( $curl, CURLOPT_POSTFIELDS, array());
// curl_setopt( $curl, CURLOPT_BINARYTRANSFER, 1 );
// curl_setopt( $curl, CURLOPT_POST, 1 );


$string = curl_exec( $curl );

curl_close( $curl );

debug( $string );
exit;

现在这项工作正在返回FALSE,但由于各种原因,我还返回了400个错误请求。我想我已经克服了这个问题,但我不知道该怎样做才能恢复数据。

1 个答案:

答案 0 :(得分:2)

看起来你大部分都在那里,虽然我认为你不需要任何标题。缺少的主要是设置编码,因为所有响应都被压缩(请参阅doco的General section)。

这是一个快速工作的例子:

<?php

$stack_url = 'https://api.stackexchange.com/2.2/info?site=stackoverflow';

$string  = curl_init($stack_url);

curl_setopt($string, CURLOPT_ENCODING, 'gzip');  // Required by API
curl_setopt($string, CURLOPT_RETURNTRANSFER, 1 );

$result   = curl_exec($string );
curl_close($string );

var_dump($result );

如果您正在使用API​​进行更多工作,您可能需要查看一个库来管理大部分工作,例如Stack.PHP