Php 无法使用curl请求连接到Facebook
几周前,我创建了一个简单的Facebook应用程序。我通过请求用户的许可,通过Facebook API获取用户信息。但它上周突然停止了工作,从那以后我一直在寻找答案 基本上,我使用文件获取内容从Facebook API获取用户信息。但在它开始失败后,我尝试将它改为卷曲,但仍然不起作用。我尝试使用Facebook PHP-SDK,甚至调试了makeRequest方法的代码,但在所有方法中都得到了相同的返回 当向Facebook Open Graph URL发出cURL请求时,请求失败,错误号为7或28。它们都是无法连接到站点或超时的错误代码 我的网站是在一个共享主机上的,我尝试过使用cURL来获取其他网站,效果很好。但当我试图达到平衡时,cURL返回FALSE 主机具有SSL证书,启用了cURL等,并且在不久前工作正常。我已经阅读了很多关于这个的文章,尝试了很多不同的卷曲选项,但是没有一个是有效的 有什么想法吗 index.phpPhp 无法使用curl请求连接到Facebook,php,facebook,facebook-graph-api,curl,Php,Facebook,Facebook Graph Api,Curl,几周前,我创建了一个简单的Facebook应用程序。我通过请求用户的许可,通过Facebook API获取用户信息。但它上周突然停止了工作,从那以后我一直在寻找答案 基本上,我使用文件获取内容从Facebook API获取用户信息。但在它开始失败后,我尝试将它改为卷曲,但仍然不起作用。我尝试使用Facebook PHP-SDK,甚至调试了makeRequest方法的代码,但在所有方法中都得到了相同的返回 当向Facebook Open Graph URL发出cURL请求时,请求失败,错误号为7或
$auth\u url=”https://www.facebook.com/dialog/oauth?client_id=" . $应用程序id。“&重定向_uri=”。urlencode($GLOBALS['canvas_page'])。“&scope=publish\u流,电子邮件”;
$signed_request=$_POST[“signed_request”];
列表($encoded_sig,$payload)=分解('.',$signed_请求,2);
$data=json_解码(base64_解码(strtr($payload,'-'','+/')),true);
if(空($data[“user\u id”])){
echo(“top.location.href=”。$auth_url。””;
}否则{
$\u会话['oauth\u令牌]=$data['oauth\u令牌'];
$\u会话['user\u id']=$data[“user\u id”];
$user=新用户($\u会话['user\u id',$\u会话['oauth\u令牌]);
用户类
函数构造($fid,$at){
$this->facebook=新facebook(数组)(
“appId”=>“”,
“机密”=>“”,
));
$this->fid=$fid;
$this->token=$at;
如果($data=$this->getGraph()){
...
}
}
公共函数getGraph(){
$session=$this->facebook->getUser();
如果($会议){
试一试{
$access_token=$this->facebook->getAccessToken();
$attachment=array('access\u token'=>$access\u token);
//$result=$this->facebook->api('/'.$this->fid,'GET',$attachment);
$result=$this->facebook->api('/'.$this->fid,'GET');
返回$result;
}捕获(FacebookApiException$e){
返回false;
}
}
}
注意事项:
- 在检查了FacebookPHPSDK方法之后,我意识到我不需要发送访问令牌,因为如果访问令牌不在$params中,它将设置它
- 它转到sdk中的makeRequest()方法,并从curl_exec返回false
有关循环DNS的更多信息,您可以访问。您可以发布应用程序初始化和curl代码吗?网络架构是否有任何更改?防火墙?ips?主机文件?您可以从命令行ping graph.facebook.com吗?您可以使用curl作为命令行,并使用-v选项查看更多信息吗?我没有shell访问权限,site托管在共享服务器上。但通过清除DNS缓存解决了该问题。这与Facebook使用的循环DNS技术有关。我自己无法回答这个问题,因为我没有足够的代表。如果您可以单独发布您的答案并将其选为已接受的答案,这将有助于寻找答案的人对于未回答的问题。
$auth_url = "https://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($GLOBALS['canvas_page']) . "&scope=publish_stream,email";
$signed_request = $_POST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
if (empty($data["user_id"])) {
echo("<script> top.location.href='" . $auth_url . "'</script>");
} else {
$_SESSION['oauth_token'] = $data['oauth_token'];
$_SESSION['user_id'] = $data["user_id"];
$user = new User($_SESSION['user_id'], $_SESSION['oauth_token']);
function __construct($fid, $at) {
$this->facebook = new Facebook(array(
'appId' => "<APP_ID>",
'secret' => "<FACEBOOK_SECRET_ID>",
));
$this->fid = $fid;
$this->token = $at;
if ($data = $this->getGraph()) {
...
}
}
public function getGraph() {
$session = $this->facebook->getUser();
if ($session) {
try {
$access_token = $this->facebook->getAccessToken();
$attachment = array('access_token' => $access_token);
//$result = $this->facebook->api('/' . $this->fid, 'GET', $attachment);
$result = $this->facebook->api('/' . $this->fid, 'GET');
return $result;
} catch (FacebookApiException $e) {
return false;
}
}
}