file_get_contents не работает для извлечения данных из Facebook с помощью пакетных запросов - PullRequest
0 голосов
/ 19 января 2012

file_get_contents не работает для извлечения данных из Facebook с помощью пакетных запросов. Используйте код ниже:

  $url='https://graph.facebook.com/?batch=[{ "method": "POST", "relative_url":"method/fql.query?query=SELECT+first_name+from+user+where+uid=12345678"}]&  access_token=xxxxxxx&method=post';
 echo  $post = file_get_contents($url,true);
it produces 
    Warning: file_get_contents(graph.facebook.com/?batch=[{ "method": "POST", "relative_url": "method/fql.query?query=SELECT+first_name+from+user+where+uid=12345"}]&access_to‌ ​ken=xxxx&method=post): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /home/user/workspace/fslo/test.php on line 9

1 Ответ

5 голосов
/ 19 января 2012

Я бы сказал, что наиболее вероятный ответ на этот вопрос заключается в том, что вам нужно передать значения URL через urlencode() - в частности, строку JSON.

Кроме того, вы должны POST использовать данные.

Попробуйте этот код:

Примечание: я предполагаю, что вы создаете URL из нескольких переменных.Если вы отредактируете вопрос с помощью своего фактического кода, я предоставлю решение, используя этот код

<?php

  $baseURL = 'https://graph.facebook.com/';

  $requestFields = array (
    'batch' => '[{"method":"POST","relative_url":"method/fql.query?query=SELECT+first_name+from+user+where+uid=12345678"}]',
    'access_to‌ken' => 'whatever'
  );
  $requestBody = http_build_query($requestFields);

  $opts = array(
    'http'=>array(
      'method' => 'POST',
      'header' => "Content-Type: application/x-www-form-urlencoded\r\n"
                . "Content-Length: ".strlen($requestBody)."\r\n"
                . "Connection: close\r\n",
      'content' => $requestBody
    )
  );

  $context = stream_context_create($opts);

  $result = file_get_contents($baseURL, FALSE, $context);

В наши дни «более стандартным» способом является использование cURL:

<?php

  $baseURL = 'https://graph.facebook.com/';

  $requestFields = array (
    'batch' => '[{"method":"POST","relative_url":"method/fql.query?query=SELECT+first_name+from+user+where+uid=12345678"}]',
    'access_to‌ken' => 'whatever'
  );
  $requestBody = http_build_query($requestFields);

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $baseURL);
  curl_setopt($ch, CURLOPT_POST, TRUE);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/x-www-form-urlencoded',
    'Content-Length: '.strlen($requestBody),
    'Connection: close'
  ));

  $post = curl_exec($ch);
...