Доступ по url php

Как правильно в php получать данные по url?

Вопрос состоит вот в чем — есть допустим server.com, на нем созданы определенные роуты, типа server.com/getuser?id=1 и т.д. как правильно в php на стороне бэкэнда обращаться по url, передавать POST и GET параметры и получать данные в ответ?

cURL самый гибкий вариант.
Вся информация о работе с cURL на PHP тут.

$file = curl_init('http://simple.ru'); // Настройка cURL до выполнении операции считывания curl_setopt($file, CURLOPT_RETURNTRANSFER, true); // устанавливаем true, для получения содержимого в переменную, вместо вывода в браузер curl_setopt($file, CURLOPT_HEADER, false); // отключить вывод заголовка в содержимом curl_setopt($file, CURLOPT_FOLLOWLOCATION, true); // следовать редиректу, если сервер пытается перенаправить посетителя curl_setopt($file, CURLOPT_MAXREDIRS, 5); // максимальное кол-во редиректов curl_setopt($file, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36'); // информация о браузере curl_setopt($curl, CURLOPT_POST, true); // включаем POST передачу данных curl_setopt($curl, CURLOPT_POSTFIELDS, "a=4&b=7"); // указываем POST данные // Выполнение операции считывания и получение результата $data = curl_exec($file); // получаем содержимое (если страница - html-код, если картинка - код картинки и т.п.) $code = curl_getinfo($file, CURLINFO_HTTP_CODE); // получаем код ответа сервера (200, 500 и др.) $type = curl_getinfo($file, CURLINFO_CONTENT_TYPE); // получает тип передаваемого содержимого (text/html, jpeg/image и др.) curl_close($file);

а если нужно передать GET-запросом данные, то получается мы сразу в url вписывает поcле знака вопроса нужные параметры, а POST отключаем?

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

Источник

https://

Предоставляет доступ только для чтения файлов/ресурсов через HTTP. По умолчанию используется HTTP 1.0 GET. Для поддержки виртуальных хостов на основе имён вместе с запросом посылается заголовок Host: . Если вы сконфигурировали строку user_agent, используя ваш файл php.ini или контекст потока, то она также будет включена в запрос.

Этот поток также позволяет получить доступ к содержимому ресурса; заголовки сохраняются в переменной $http_response_header .

Если важно знать URL, с которого был получен документ (после всех переадресаций, которые были произведены), то вам необходимо обработать серию заголовков ответов, возвращаемых потоком.

INI-директива from будет использоваться для заголовка From: , если установлена и не переопределена в контексте Контекстные опции и параметры.

Использование

  • http://example.com
  • http://example.com/file.php?var1=val1&var2=val2
  • http://user:password@example.com
  • https://example.com
  • https://example.com/file.php?var1=val1&var2=val2
  • https://user:password@example.com

Опции

Основная информация

Атрибут Поддержка
Ограничение по allow_url_fopen Да
Чтение Да
Запись Нет
Добавление Нет
Одновременное чтение и запись Недоступно
Поддержка stat() Нет
Поддержка unlink() Нет
Поддержка rename() Нет
Поддержка mkdir() Нет
Поддержка rmdir() Нет

Примеры

Пример #1 Определение URL, с которого был забран документ после переадресаций

$meta_data = stream_get_meta_data ( $fp );
foreach ( $meta_data [ ‘wrapper_data’ ] as $response )

/* Были ли мы переадресованы? */
if ( strtolower ( substr ( $response , 0 , 10 )) == ‘location: ‘ )

/* Сохранить в $url адрес, куда нас переадресовали */
$url = substr ( $response , 10 );
>

Примечания

Замечание: Протокол HTTPS поддерживается только когда модуль openssl включён.

Соединения HTTP предназначены только для чтения; запись данных или копирование файлов в HTTP-ресурс не поддерживается.

Отправка запросов POST и PUT, например, может быть выполнена с помощью HTTP-контекста.

Смотрите также

User Contributed Notes 4 notes

Passing authentication information in the URL as in «https://user:password@example.com» works for HTTP «Basic» access authentication but not for HTTP «Digest» access authentication. You can use the cURL functions for servers requesting HTTP «Digest» access authentication.

«The stream allows access to the body of the resource; the headers are stored in the $http_response_header variable. Since PHP 4.3.0, the headers are available using stream_get_meta_data().»

This one sentence is the only documentation I have found on the mysterious $http_response_header variable, and I’m afraid it’s misleading. It implies that from 4.3.0 onward, stream_get_meta_data() ought to be used in favor of $http_response_header.

Don’t be fooled! stream_get_meta_data() requires a stream reference, which makes it ONLY useful with fopen() and related functions. However, $http_response_header can be used to get the headers from the much simpler file_get_contents() and related functions, which makes it still very useful in 5.x.

Also note that even when file_get_contents() and friends fail due to a 4xx or 5xx error and return false, the headers are still available in $http_response_header.

function post_it ( $datastream , $url )

$url = preg_replace ( «@^http://@i» , «» , $url );
$host = substr ( $url , 0 , strpos ( $url , «/» ));
$uri = strstr ( $url , «/» );

$reqbody = «» ;
foreach( $datastream as $key => $val ) if (!empty( $reqbody )) $reqbody .= «&» ;
$reqbody .= $key . » keyword»>. urlencode ( $val );
>

$contentlength = strlen ( $reqbody );
$reqheader = «POST $uri HTTP/1.1\r\n» .
«Host: $host \n» . «User-Agent: PostIt\r\n» .
«Content-Type: application/x-www-form-urlencoded\r\n» .
«Content-Length: $contentlength \r\n\r\n» .
» $reqbody \r\n» ;

$socket = fsockopen ( $host , 80 , $errno , $errstr );

if (! $socket ) $result [ «errno» ] = $errno ;
$result [ «errstr» ] = $errstr ;
return $result ;
>

while (! feof ( $socket )) $result [] = fgets ( $socket , 4096 );
>

Источник

Как получить текущий URL в PHP?

Сформировать текущий адрес страницы можно с помощью элементов массива $_SERVER. Рассмотрим на примере URL:

Полный URL

$url = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; echo $url;

Результат:

https://example.com/category/page?sort=asc

URL без GET-параметров

$url = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $url = explode('?', $url); $url = $url[0]; echo $url;

Результат:

https://example.com/category/page

Основной путь и GET-параметры

$url = $_SERVER['REQUEST_URI']; echo $url;

Результат:

Только основной путь

$url = $_SERVER['REQUEST_URI']; $url = explode('?', $url); $url = $url[0]; echo $url;

Результат:

Только GET-параметры

Результат:

Для преобразования строки с GET-параметрами в ассоциативный массив можно применить функцию parse_str() .

parse_str('sort=asc&page=2&brand=rich', $get); print_r($get);

Результат:

Array ( [sort] => asc [page] => 2 [brand] => rich )

Комментарии 2

Авторизуйтесь, чтобы добавить комментарий.

Другие публикации

Чтение Google таблиц в PHP

Как получить данные из Google spreadsheets в виде массива PHP? Очень просто, Google docs позволяет экспортировать лист в формате CSV, главное чтобы файл был в общем доступе.

Сортировка массивов

В продолжении темы работы с массивами поговорим о типичной задаче – их сортировке. Для ее выполнения в PHP существует множество функций, их подробное описание можно посмотреть на php.net, рассмотрим.

Источник

https://

Предоставляет доступ только для чтения файлов/ресурсов через HTTP 1.0, используя метод HTTP GET. Для поддержки name-based виртуальных хостов вместе с запросом посылается заголовок Host:. Если вы сконфигурировали строку user_agent, используя ваш файл php.ini или контекст потока, то она также будет включена в запрос.

Этот поток также позволяет получить доступ к содержимому ресурса; заголовки сохраняются в переменной $http_response_header .

Если важно знать URL, с которого был получен документ (после всех переадресаций, которые были произведены), то вам необходимо обработать серию заголовков ответов, возвращаемых потоком.

INI-директива from будет использоваться для заголовка From:, если установлена и не переопределена в контексте Контекстные опции и параметры.

Использование

  • http://example.com
  • http://example.com/file.php?var1=val1&var2=val2
  • http://user:password@example.com
  • https://example.com
  • https://example.com/file.php?var1=val1&var2=val2
  • https://user:password@example.com

Опции

Основная информация

Атрибут Поддержка
Ограничение по allow_url_fopen Да
Чтение Да
Запись Нет
Добавление Нет
Одновременное чтение и запись Недоступно
Поддержка stat() Нет
Поддержка unlink() Нет
Поддержка rename() Нет
Поддержка mkdir() Нет
Поддержка rmdir() Нет

Список изменений

Версия Описание
4.3.7 Определение сбойных IIS-серверов для избежания ошибок типа «SSL: Fatal Protocol Error».
4.3.0 Добавлен протокол https://.
4.0.5 Добавлена поддержка переадресаций.

Примеры

Пример #1 Определение URL, с которого был забран документ после переадресаций

$meta_data = stream_get_meta_data ( $fp );
foreach ( $meta_data [ ‘wrapper_data’ ] as $response )

/* Были ли мы переадресованы? */
if ( strtolower ( substr ( $response , 0 , 10 )) == ‘location: ‘ )

/* Сохранить в $url адрес, куда нас переадресовали */
$url = substr ( $response , 10 );
>

Примечания

Замечание: Протокол HTTPS поддерживается только когда расширение openssl включено.

Соединения HTTP предназначены только для чтения; запись данных или копирование файлов в HTTP-ресурс не поддерживается.

Отправка запросов POST и PUT, например, может быть выполнена с помощью HTTP-контекста.

Смотрите также

Источник

Оцените статью