2012-06-02 4 views
3

file_get_contents не работает со следующими URL (не удалось открыть поток: HTTP запрос не удалось HTTP/1.0 400 Bad Request)file_get_contents не работает с facebook График API

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=235326466577139&redirect_uri=http%3A%2F%2Fapps.facebook.com%2Flikeablephotos%2F&client_secret=CLIENT_SECRET&code=AQDFZbjpAUda8c_gz4wDDuBOVrsn0dApz3s8UA--7hFQIi1wb70-tDE56xXcCtDq-hV5UWzR5YEw_ozuGT24FLfvh9KnqHZ3xdn46P_KxYCf3DHJQA3AAu2ICHBqTk1-6fHTsl6FbagKz83H6dn15kkbKksajA4KcVIoPse5JbuBLlh6V5L1ANe8fzR94iH_SMU";

$response = file_get_contents($token_url); 

, но если вы скопируете и вставьте указанный выше URL-адрес в адресную строку браузера, он будет работать отлично! и возвращает:

access_token=AAADWBzZAyUvMBAL2Th6CRtxh2Up5soTCK8N4HJcy0ZBhQgJPxtZArKbuITISMoGLDxNiyeNW4GUZCBvJPeBTH6mx4v83ueUIAAYQJA1WrAZDZD&expires=5112501 

но его аналогичный URL (для другого пользователя), также работает:

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=235326466577139&redirect_uri=http%3A%2F%2Fapps.facebook.com%2Flikeablephotos%2F&client_secret=CLIENT_SECRET&code=AQC2kTEV96-1Cki2oYUhyzjH6yFe6AJRd1Q3G8fbUXW-IsLJUlactzSwCvGVBK6jh1tL-t7v6dOWJZzbkSYhk0n2z6BHQcpljWAdoXFGB5zLC4FgW8fmxT6hwdRIQOr2dZ95CD_q5yJuOUz_2DItUa3_FF9m2_TmFYGEbxPoiaF47YSTUuZp6g-8ffziJcKDAdo"; 

при использовании file_get_contents

Пожалуйста, помогите, спасибо

+0

Это старая тема, но я столкнулся с этой проблемой и решил ее так: https-оболочки были отключены на хостинге, поэтому мне пришлось включить php_openssl –

+0

cURL может обрабатывать HTTPS без проблем, а 'file_get_contents () 'может не работать в некоторых случаях. – Raptor

ответ

2

В качестве альтернативы file_get_contents вы считали использование cURL. Я использую завиток для большого количества запросов с отличными результатами, и в случае сбоя он не будет раскрывать секрет вашего клиента.

см http://php.net/manual/en/book.curl.php

этот фрагмент кода является стандартной для всех моих приложений, чтобы получить маркер доступа приложений. Может использоваться для всех вызовов api.


$app_access_token = GetCH(); 
function GetCH(){ 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
if(substr($url,0,8)=='https://'){ 
    // The following ensures SSL always works. A little detail: 
    // SSL does two things at once: 
    // 1. it encrypts communication 
    // 2. it ensures the target party is who it claims to be. 
    // In short, if the following code is allowed, CURL won't check if the 
    // certificate is known and valid, however, it still encrypts communication. 
    curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY); 
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 
} 
$sendCH = curl_exec($ch); 
curl_close($ch); 
return $sendCH; 
}; 
+0

Спасибо за ваш ответ, я играл с завитом, но не могу заставить его работать с URL-адресом, который дал мне плохую просьбу, я просто попробовал свой код для этого URL-адреса, и он тоже не работает, но возвращает : –

+0

Спасибо @Shawn E Carter за ваш ответ, я играл с завитом, но не могу заставить его работать с URL-адресом, который давал мне плохую просьбу, я просто попробовал свой код для этого URL-адреса, не работает, но возвращает: {"error": {"message": "Ошибка проверки кода подтверждения.", "type": "OAuthException", "code": 100}} Мне нужно использовать оригинальный url –

+0

cont .. , который теперь изменился из-за перезагрузки приложения: https://graph.facebook.com/oauth/access_token?client_id = 235326466577139 & redirect_uri = HTTP% 3A% 2F% 2Fapps.facebook.com% 2Flikeablephotos% 2F & client_secret = 66946fa19cec760e5e747eafae1307ff & код = AQAeLmwImyd0oAi8VWtC4M-WXRvKvEltq9ER3rtwMx4lCu-9Khe-KGwK8Q9xt_FnrE-GnfkjA7d6Eo_ry2Ce_IKrtSfXfLhLvdFZ7ShxssF4FN0QlZeC9y3qJJ64nVpy_BJFIViioOZeEkxwxGrRpkMb-eplOoW78DK9vVjDMois2FGFQknLVJ9A9Y35HpQXn-г –

2

Наконец нашел ответ, была та же самая проблема issue..the, скорее всего, потому что код Facebook, что они дают вам есть пробелы в между Params. Если вы просто скопировали и ввели из Facebook, вы получите ошибку HTTP/1.1 400 Bad Request. Поместите все параметры на одну строку и удалите все пробелы, и это должно исправить. Работал для меня. Я знаю, что это более старая должность, но если у вас возникла эта проблема, сообщите мне, работает ли она для вас!

+0

Я сделал ту же ошибку, спасибо! – Ben

0

Для отладки:

Возьмите действительную строку в $ token_url и вставить в адресную строку браузера и посмотреть, что происходит.

Вы получите какой-нибудь код ошибки json.

Для меня это был мой токен истек. Запуск нового запроса работал нормально.

0

Аналогичная проблема возникла у меня, проблема заключалась в том, что токен доступа, поставляемый с URL-адресом, истек, поскольку токен доступа имеет 1-часовую валидность, поэтому я создал новый токен доступа и снова работает, надеюсь, эта информация поможет.

Смежные вопросы