В соответствии с описанием API пользовательского поиска Google вы можете вызвать его с помощью GET-глагола интерфейса REST, например, с помощью примера:
GET https://www.googleapis.com/customsearch/v1?key=INSERT-YOUR-KEY&cx=017576662512468239146:omuauf_lfve&q=lectures
Я настраиваю свой ключ API и систему пользовательского поиска, а при вставке моего тестового запроса непосредственно в мой браузер он работал нормально, и я получил файл JSON для меня.
Затем я попытался вызвать API из своего PHP-кода, используя:
$json = file_get_contents("$url") or die("failed");
Где $ url был тем же, который работал в браузере, но мой PHP-код умирал при попытке его открыть.
После этого я попытался с завитом, и это сработало. Код был следующий:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $body = curl_exec($ch);
Вопросы :
Сначала вы должны проверить установку ini allow_url_fopen
, allow_url_fopen
, это единственная причина, почему file_get_contents()
не должен работать. Также может быть safe_mode
недопустимый safe_mode
.
О, исходя из вашего комментария, вы должны добавить http://
в URL-адрес при использовании с функциями файловой системы , это оболочка, которая сообщает php, что вам нужно использовать HTTP-запрос, без функции, которую, как вам кажется, требуется открыть ./google.com
(то же, что и google.txt
).
Да, вы можете построить почти любой запрос cURL с сокетами.
Мое личное мнение заключается в том, что вы должны придерживаться cURL, потому что:
file_get_contents
вероятно, перепишет ваш запрос после получения IP-адреса, получив то же самое, что и:
file_get_contents("xxx.yyy.www.zzz/app1",...)
Многие серверы откажут вам в доступе, если вы пройдете через IP-адресацию в запросе.
С cURL эта проблема не существует. Он разрешает имя хоста, оставляя запрос по мере его установки, поэтому сервер не является грубым в ответ.
Это может быть и «причина».
1) Почему вы используете кавычки при вызове file_get_contents
?
2) Как уже упоминалось в комментарии, file_get_contents
требует allow_url_fopen
на вашем php.ini .
3) Вы можете использовать fsockopen
, но вам придется обрабатывать HTTP-запросы / ответы вручную, что было бы заново изобрести колесо, когда у вас есть cURL. То же самое касается socket_create
.
4) Что касается названия этого вопроса: cURL может быть более настраиваемым и полезным для работы со сложными HTTP-транзакциями, чем с file_get_contents
. Хотя следует отметить, что работа с потоковыми контекстами позволяет вам сделать много настроек для ваших вызовов file_get_contents
. Однако я думаю, что cURL еще более совершенен, поскольку он дает вам, например, возможность работы с несколькими параллельными обработчиками .