Меню Закрыть

Curl отправить get запрос

Содержание

У меня проблема, когда я хочу отправить запрос GET с помощью функции php curl или file_get_contents .
Я думаю, что эта проблема для моего URL!
Помогите мне, пожалуйста …
мой код (функция file_get_contents):

мой код (php curl):

Решение

Этот URL перенаправляет на другой URL.
Вам необходимо добавить: curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

cURL — это программное обеспечение, состоящее из утилиты командной строки и библиотеки, предназначенное для передачи данных по разнообразным протоколам (HTTP, FTP, POP3, IMAP, SMTP и мн. др.). Мы рассмотрим только утилиту командной строки, название которой мы будем записывать как "curl". Навыки, полученные при ее использовании, позволяют легко освоить работу с библиотекой libcurl. Кроме того, мы ограничимся формированием HTTP-запросов: GET и POST.

Предварительные сведения

Протокол HTTP

HTTP — это протокол, используемый при обмене данных между веб-сервером и программой-клиентом (например, браузером). Он состоит из строк ASCII-текста, отсылаемых от клиента к серверу для запроса какого-либо действия. При получении запроса сервер отвечает клиенту несколькими служебными текстовыми строками, а затем выдает запрошенное содержимое.

Используя ключ -v , можно увидеть, какие именно команды curl отсылает серверу. Этот ключ дает возможность разобраться в особенностях взаимодействия curl и веб-сервера и помогает отладить запрос.

URL (Uniform Resource Locator — единый указатель ресурса) задает адрес определенного ресурса в Интернет. Например, URL веб-страницы cURL, записывается так: http://curl.haxx.se .

Формы

Формы представляют собой наборы полей, размещенные на веб-странице. Пользователь вводит в эти поля данные, затем нажимает на кнопку "OK" или "Отправить", после чего данные отправляются на сервер. Сервер принимает данные и решает, как поступить дальше: искать ли информацию в базе данных, показать ли введенный адрес на карте или использовать информацию для аутентификации пользователя. Разумеется, "решает" — означает, что на стороне сервера должна быть какая-то программа, которая принимает и обрабатывает присланные данные. Простейший пример: форма запроса поисковика Google.

Читайте также:  Как найти периметр ромба через диагонали

Справка

Справку по curl можно получить, набрав в командной строке

$ — приглашение командной строки.

Получить содержимое страницы (GET)

Самый простой и обычный HTTP-запрос — получить содержимое заданного URL. URL может ссылаться на веб-страницу, изображение или какой либо-другой файл. Клиент отсылает GET-запрос на сервер и получает запрашиваемый документ. Если выполнить команду

вы получите веб-страницу, выведенную в окно терминала (точнее, в стандартный вывод). Чтобы сохранить эту страницу в файл curl.html , нужно указать

Все HTTP-ответы содержат набор заголовков, которые обычно скрыты. Чтобы увидеть эти заголовки вместе с самим документом, используйте ключ -i .

Отправить GET-запрос из формы

Форма запроса может использовать метод GET. Например, так:

Если вы откроете этот код в браузере, то увидите форму с текстовым полем и кнопкой с надписью "OK". Если вы, например, введете в форму ‘1990’ и нажмете "OK", то браузер создаст новый URL, по которому и проследует. Этот URL будет являться строкой, состоящей из предыдущего URL и строки запроса, вроде следующей: foo.cgi?year=1990&press=OK . Так, если форма располагалась по адресу www.foo.com/year.html (адрес взят "с потолка"!), то при нажатии на кнопку "OK" вы попадете на URL www.foo.com/foo.cgi?year=1990&press=OK .

Для формирования GET-запроса, введите то, что ожидалось от формы:

Метод POST

Метод GET приводит к тому, что вся введенная информация отображается в адресной строке браузера. Очевидно, что это не самый лучший способ в тех случаях, когда нужно отправить конфиденциальные данные или когда объем введенной информации очень велик. Для решения этой проблемы протокол HTTP предоставляет пользователю еще один метод — POST. С его помощью клиент отправляет данные отдельно от URL, и поэтому в адресной строке браузера вы их не увидите.

Читайте также:  Что можно подарить путешественнику

Форма, генерирующая POST-запрос, отличается от предыдущей лишь методом отправки:

curl сформирует POST-запрос с теми же данными следующим образом:

Обратите внимание на то, что данные, которые вы отправляете серверу, должны быть правильно закодированы. curl не сделает этого за вас. К примеру, если вы хотите, чтобы данные содержали пробел, то вам нужно заменить этот пробел на %20 и т. п. Это одна из самых распространенных ошибок, в результате чего данные передаются не так, как нужно.

Загрузка файлов с помощью POST

Форма, с помощью которой пользователь может загрузить файл, выглядит примерно так:

Заметьте, что тип содержимого Content-Type установлен в multipart/form-data .

Чтобы с помощью curl отослать данные в такую форму, введите:

Скрытые поля формы

Скрытые поля в формах являются одним из наиболее распространенных способов передачи информации о состоянии HTML-приложения. Такие поля не заполняются, они невидимы для пользователя, но передаются так же, как и обычные поля.

Пример формы с одним видимым и одним скрытым полями:

Чтобы отправить POST-запрос с помощью curl, вам не нужно задумываться о том, скрыто поле или нет — для curl все поля одинаковы:

Как выглядит POST-запрос "изнутри"

Когда с помощью curl вы заполняете форму и отсылаете ее данные на сервер, вы наверняка хотите, чтобы сформированный curl POST-запрос выглядел так же, как если бы он был выполнен с помощью браузера.

Простейший способ увидеть свой POST-запрос заключается в следующем:

  1. сохранить веб-страницу с формой на диск;
  2. изменить метод на GET;
  3. нажать кнопку "Отправить" (вы можете также изменить URL, которому будет передаваться данные).

Вы увидите, что данные присоединились к URL и разделены символами ? , как это и предполагается при использовании GET-форм.

Читайте также:  Особенности широкоформатной печати

Читайте также

Комментарии

Дмитрий Храмов
Компьютерное моделирование и все, что с ним связано: сбор данных, их анализ, разработка математических моделей, софт для моделирования, визуализации и оформления публикаций. Ну и за жизнь немного.

GET запрос

POST запрос

file_get_contents() так же умеет отправлять POST запросы:

PUT запрос

DELETE запрос

HTTP-метод DELETE используется в REST API для удаления объектов.

Отправка файлов на другой сервер

Отправка файлов осуществляется методом POST :

С PHP 5.5 такой метод загрузки файлов вызывает ошибку, поэтому следует применять CURLFile.

Также через curl можно отправить сразу несколько файлов:

Еще файлы можно отправить методом PUT , например так загружаются файлы в REST API Яндекс Диска.

Скачивание файлов

Curl позволяет сохранить результат сразу в файл, указав указатель на открытый файл в параметре CURLOPT_FILE .

Отправить и получить cookie

Чтобы CURL сохранял куки в файле достаточно прописать его путь в параметрах CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR .

Передать значение кук можно принудительно через параметр CURLOPT_COOKIE .

Имитация браузера

На многих сайтах есть защита от парсинга. Она основана на том что браузер передает серверу user agent , referer , cookie . Сервер проверяет эти данные и возвращает нормальную страницу. При подключение через curl эти данные не передаются и сервер отдает ошибку 404 или 500. Чтобы имитировать браузер нужно добавить заголовки:

HTTP авторизация

Если на сервере настроена HTTP авторизация, например с помощью .htpasswd, подключится к нему можно с помощью параметра CURLOPT_USERPWD .

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.