Проблема PHP file_get_contents

У меня проблема с командой PHP file_get_contents.

$url = "http://api.rememberthemilk.com/services/rest/".$format.$auth_token.$filter."&api_sig=".$md5.$apikey.$method;

$content = file_get_contents($url);

$array = json_decode($content, true);
$taskname = $array['rsp']['tasks']['list']['taskseries']['name'];
$duedate = $array['rsp']['tasks']['list']['taskseries']['task']['due'];

($format, $auth_token, $filter, $md5, $apikey, $method уже определены в скрипте)

Когда я пытаюсь запустить этот код, эта ошибка возвращается:

[function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP/1.1 400 Неверный запрос для строки 101

строка 101 = $content, = file_get_contents($url);

Как это исправить? Спасибо!!!


person 01jayss    schedule 06.03.2011    source источник
comment
В file_get_contents нечего исправлять. URL-адрес, который вы пытаетесь прочитать, неверен.   -  person Jon    schedule 06.03.2011
comment
Пожалуйста, покажите полный URL-адрес, который вы пытаетесь прочитать (конечно, без вашего токена авторизации)   -  person Pekka    schedule 06.03.2011
comment
Это также может быть недопустимый запрос (неправильные параметры, вы, похоже, слишком много объединяете) или заблокированный PHP user_agent.   -  person mario    schedule 06.03.2011
comment
вы можете проверить значение allow_url_fopen. Полезная информация также содержится в примечаниях к документации php для этой функции.   -  person Andreas    schedule 06.03.2011
comment
вот URL: http://api.rememberthemilk.com/services/rest/?format=json&auth_token=AUTH_TOKEN&filter=dueWithin:"3 days of today"&api_sig=API_SIG&api_key=API_KEY&method=rtm.tasks.getList (я заменил фактические auth_token, api_sig и api_key)   -  person 01jayss    schedule 06.03.2011
comment
при создании URL всегда кодируйте строку запроса, используйте urlencode() и urldecode().   -  person Kumar    schedule 06.03.2011


Ответы (2)


Этот URL выглядит не очень хорошо.

http://api.rememberthemilk.com/services/rest/?format=json&auth_token=AUTH_TOKEN&filter=dueВ течение:"3 дня сегодня"&api_sig=API_SIG&api_key=API_KEY&method=rtm.tasks.getList

Закодируйте токены следующим образом:

$filter = 'filter='.urlencode('dueWithin:"3 дня сегодня"');

Используйте урленкод().

person tacone    schedule 06.03.2011

Попробуйте распечатать URL-адрес после объединения переменных. Затем вставьте URL-адрес в адресную строку браузера и посмотрите, что вернется. Поскольку это вызов веб-службы, ваш браузер может не знать, что делать с ответом. В этом случае вы можете получить дополнительную информацию с помощью пользовательского агента командной строки «curl», например.

curl -v 'http://some-url'

curl встроен в Mac и другие машины *nix, а также доступен для Windows.

person inkfist    schedule 06.03.2011