Функции CURL, Client URL Library
В PHP включена поддержка libcurl — библиотеки функций, написанной Daniel Stenberg, которая позволяет взаимодействовать с различными серверами по различным протоколам. В настоящее время libcurl поддерживает протоколы http, https, ftp, gopher, telnet, dict, file, и ldap. libcurl также умеет работать с сертификатами HTTPS, посылать запросы к HTTP серверам методами POST и PUT, закачивать файлы по протоколам HTTP и FTP (последнее можно сделать также используя модуль FTP), использовать прокси-серверы, cookies и аутентификацию пользователей.
Для использования функций CURL необходимо установить пакет CURL. Необходимо мспользовать версию CURL 7.0.2-beta или старше, с более младшими версиями PHP не работает. Для PHP 4.2.3 необходимо использовать версию CURL 7.9.0 или старше. Начиная PHP 4.3.0, необходима CURL 7.9.8 или старше. Вероятнее всего, PHP 5.0.0 будет требовать CURL не младше 7.10.5.
Установка
Для использования CURL необходимо также собрать PHP с опцией —with-curl[=DIR], где DIR — имя директории, содержащей поддиректории lib и include. Директория «include» должна содержать поддиректорию «curl» с файлами easy.h и curl.h. Директория «lib» должна содержать файл libcurl.a. Начиная с PHP 4.3.0 с помощью опции —with-curlwrappers можно сконфигурировать PHP для использования CURL при работе с удаленными файлами.
Замечание для пользователей Win32: Для работы с этим модулем в Windows необходимо скопировать файлы libeay32.dll и ssleay32.dll из директории DLL Win32 дистрибутива PHP в директорию SYSTEM (Нпример C:\WINNT\SYSTEM32 или C:\WINDOWS\SYSTEM)
11 примеров использование команд cURL в режиме реального времени
cURL — инструмент командной строки для получения или отправки данных с использованием синтаксиса URL.
Если вы работаете в службе поддержки, то должны уметь использовать команды cURL для устранения неполадок веб-приложений. cURL — кроссплатформенная утилита для Windows, MAC и UNIX.
Ниже приведены некоторые часто используемые примеры синтаксиса.
1. Проверка возможности подключения к URL-адресу
Если вы работаете в UNIX-системе и пытаетесь подключиться к внешнему URL-адресу, то сначала проверьте наличие доступа к ресурсу через curl . Для этого используйте следующую команду:
2. Сохранение вывод URL / URI в файл
Если нужно сохранить содержимое URL или URI в конкретном файле, используйте следующий синтаксис:
Приведенный выше пример сохранит все содержимое с хоста 74.125.68.100 в файл /tmp/google.html .
3. Показать заголовок запроса и ответа
Если хотите удостовериться, что получаете ожидаемый заголовок запроса и ответа, используйте следующую команду:
4. Загрузить с предельной скоростью
Если нужно узнать, сколько времени требуется для загрузки с определенной скоростью, то используйте следующую команду:
5. Использование прокси для подключения
Если необходимо проверить, можно ли использовать прокси-сервер, примените следующий синтаксис:
6. Проверка URL-адресас введением заголовка
Для устранения конкретной проблемы можно использовать Curl , чтобы вставить в header свои данные. Рассмотрим следующий пример запроса с Content-Type:
Мы просим curl передать Content-Type в качестве application / json в заголовок запроса.
7. Добавить дополнительный заголовок
Вы можете добавить заголовок к запросу с помощью синтаксиса — header .
8. Открыть только заголовок ответа
Если вы хотите быстро проверить заголовок ответа, то для этого можно использовать следующий синтаксис.
9. Подключить HTTPS / SSLURL-адрес и игнорировать любые ошибки SSL -сертификата
Если необходимо получить доступ к https URL-адресу, который выдает ошибку сертификата из-за несоответствия имени хоста, можно использовать следующий синтаксис.
10. Подключиться с использованием определенного протокола (SSL / TLS)
Чтобы подключиться к URL- адресу только по протоколу SSL V2 / V3 или TLS ,используйте следующий синтаксис.
Для подключения с использованием SSLV2:
Для подключения с использованием SSLV3:
Для подключения через TLS:
11. Загрузить файл с FTP-сервера
С помощью cURL можно загрузить файл с ftp-сервера , указав имя пользователя и пароль.
Всегда можно использовать «-v» с любым синтаксисом для вывода в подробном режиме.
Использования cURL онлайн
Да, это возможно. Вы можете выполнить cURL удаленно с помощью следующих инструментов.
Online CURL — компактный инструмент для извлечения URL-адреса онлайн и добавления следующих параметров.
cURL command line builder –позволяет создать команду cURL, с помощью которой можно ввести информацию в пользовательский интерфейс.
cURL — полезная утилита для устранения проблем с подключением в режиме реального времени.
Данная публикация представляет собой перевод статьи « 11 cURL Command Usage with Real-Time Example » , подготовленной дружной командой проекта Интернет-технологии.ру
Функции CURL, Client URL Library
В PHP включена поддержка libcurl — библиотеки функций, написанной Daniel Stenberg, которая позволяет взаимодействовать с различными серверами по различным протоколам. В настоящее время libcurl поддерживает протоколы http, https, ftp, gopher, telnet, dict, file, и ldap. libcurl также умеет работать с сертификатами HTTPS, посылать запросы к HTTP серверам методами POST и PUT, закачивать файлы по протоколам HTTP и FTP (последнее можно сделать также используя модуль FTP ), использовать прокси-серверы, cookies и аутентификацию пользователей.
Эти функции были добавлены в PHP 4.0.2.
Для использования CURL необходимо также собрать PHP с опцией —with-curl[=DIR] , где DIR — имя директории, содержащей поддиректории lib и include. Директория «include» должна содержать поддиректорию «curl» с файлами easy.h и curl.h . Директория «lib» должна содержать файл libcurl.a . Начиная с PHP 4.3.0 с помощью опции —with-curlwrappers можно сконфигурировать PHP для использования CURL при работе с удаленными файлами.
Замечание для пользователей Win32: Для работы с этим модулем в Windows необходимо скопировать файлы libeay32.dll и ssleay32.dll из директории DLL Win32 дистрибутива PHP в директорию SYSTEM (Нпример C:\WINNT\SYSTEM32 или C:\WINDOWS\SYSTEM )
Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.
XVI. Функции CURL, Client URL Library
В PHP включена поддержка libcurl — библиотеки функций, написанной Daniel Stenberg, которая позволяет взаимодействовать с различными серверами по различным протоколам. В настоящее время libcurl поддерживает протоколы http, https, ftp, gopher, telnet, dict, file, и ldap. libcurl также умеет работать с сертификатами HTTPS, посылать запросы к HTTP серверам методами POST и PUT, закачивать файлы по протоколам HTTP и FTP (последнее можно сделать также используя модуль FTP ), использовать прокси-серверы, cookies и аутентификацию пользователей.
Эти функции были добавлены в PHP 4.0.2.
Для использования CURL необходимо также собрать PHP с опцией —with-curl[=DIR] , где DIR — имя директории, содержащей поддиректории lib и include. Директория «include» должна содержать поддиректорию «curl» с файлами easy.h и curl.h . Директория «lib» должна содержать файл libcurl.a . Начиная с PHP 4.3.0 с помощью опции —with-curlwrappers можно сконфигурировать PHP для использования CURL при работе с удаленными файлами.
Замечание для пользователей Win32: Для работы с этим модулем в Windows необходимо скопировать файлы libeay32.dll и ssleay32.dll из директории DLL Win32 дистрибутива PHP в директорию SYSTEM (Нпример C:\WINNT\SYSTEM32 или C:\WINDOWS\SYSTEM )
Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.
Пример 1. Использования модуля CURL для сохранения стартовой страницы example.com
= curl_init ( «http://www.example.com/» );
$fp = fopen ( «example_homepage.txt» , «w» );
curl_setopt ( $ch , CURLOPT_FILE , $fp );
curl_setopt ( $ch , CURLOPT_HEADER , 0 );
curl_exec ( $ch );
curl_close ( $ch );
fclose ( $fp );
?>
Had one heck of a time getting curl to send my XML request. Tried a lot of different things, FINALLY ended up with this.
Im making a curl request to paymentech / Orbital ‘s payment gateway. Essentially, I took the same header i made for the fsockopen() request, and used it for this curl request. (Hostinc company didnt allow fsockopen().
You’ll note that this specific gateway requires a custom content type header. Thats what gave me the most trouble. When using the CURLOPT_HTTPHEADER, and CURLOPT_POSTFIELDS together, it doesnt matter, it sends the default post header because of CURLOPT_POSTFIELDS.
= «https://your.gateway.url» ;
$page = «/proccessing_page.cgi» ;
$post_string = » All XML stuff Here » ;
$header = «POST » . $page . » HTTP/1.0 \r\n» ;
$header .= «MIME-Version: 1.0 \r\n» ;
$header .= «Content-type: application/PTI26 \r\n» ;
$header .= «Content-length: » . strlen ( $post_string ). » \r\n» ;
$header .= «Content-transfer-encoding: text \r\n» ;
$header .= «Request-number: 1 \r\n» ;
$header .= «Document-type: Request \r\n» ;
$header .= «Interface-Version: Test 1.4 \r\n» ;
$header .= «Connection: close \r\n\r\n» ;
$header .= $post_string ;
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL , $url );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 );
curl_setopt ( $ch , CURLOPT_TIMEOUT , 4 );
curl_setopt ( $ch , CURLOPT_CUSTOMREQUEST , $header );
$data = curl_exec ( $ch ); if ( curl_errno ( $ch )) <
print curl_error ( $ch );
> else <
curl_close ( $ch );
>
// use XML Parser on $data, and your set!
$xml_parser = xml_parser_create ();
xml_parser_set_option ( $xml_parser , XML_OPTION_CASE_FOLDING , 0 );
xml_parser_set_option ( $xml_parser , XML_OPTION_SKIP_WHITE , 1 );
xml_parse_into_struct ( $xml_parser , $data , $vals , $index );
xml_parser_free ( $xml_parser );
// $vals = array of XML tags. Go get em!
?>
Worked like a dream for me. Enjoy!
Here’s a function that I needed and couldn’t use CURL. it helps you if you want to send the POST data (instead of GET) from one form to 2 or more other PHP scripts. Trust me. it’s a life saver!!
function HTTP_Post($URL,$data, $referrer=»») <
// parsing the given URL
$URL_Info=parse_url($URL);
// Building referrer
if($referrer==»») // if not given use this script as referrer
$referrer=$_SERVER[«SCRIPT_URI»];
// making string from $data
foreach($data as $key=>$value)
$values[]=»$key=».urlencode($value);
$data_string=implode(«&»,$values);
// Find out which port is needed — if not given use standard (=80)
if(!isset($URL_Info[«port»]))
$URL_Info[«port»]=80;
// building POST-request:
$request.=»POST «.$URL_Info[«path»].» HTTP/1.1\n»;
$request.=»Host: «.$URL_Info[«host»].»\n»;
$request.=»Referer: $referer\n»;
$request.=»Content-type: application/x-www-form-urlencoded\n»;
$request.=»Content-length: «.strlen($data_string).»\n»;
$request.=»Connection: close\n»;
$request.=»\n»;
$request.=$data_string.»\n»;
$fp = fsockopen($URL_Info[«host»],$URL_Info[«port»]);
fputs($fp, $request);
while(!feof($fp)) <
$result .= fgets($fp, 128);
>
fclose($fp);
I use CURL to get history of e-gold payment.
function get_history($egold, $pass, $batch, $counter, $s_date,
$s_month, $s_year, $e_date, $e_month, $e_year, $type)<
if($type == «0») <
$params .= «paymentsmade=1&»;
>
if($type == «1») <
$params .= «paymentsreceived=1&»;
>
if(!empty($batch)) <
$params .= «batchfilter=$batch&»;
>
if(!empty($counter)) <
$params .= «counterfilter=$counter&»;
>
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
curl_setopt($ch, CURLOPT_URL,$_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars[‘HTTP_USER_AGENT’]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$content = curl_exec ($ch);
I did this script to login to a community X number of times
= � [ the script that handle logins ] � ;
//
function login ( $url , $params ) <
$user_agent = «Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)» ;
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER , FALSE );
curl_setopt ( $ch , CURLOPT_HEADER , 0 );
curl_setopt ( $ch , CURLOPT_POST , 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , $params );
curl_setopt ( $ch , CURLOPT_URL , $url );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 );
curl_setopt ( $ch , CURLOPT_USERAGENT , $user_agent );
$cnt = 0 ;
for( $i = 0 ; $i $_GET [ �x� ]); $i ++) <
if( curl_exec ( $ch )) $cnt ++;
>
curl_close ( $ch );
return $cnt ;
>
?>
If you’re trying to post forms to an ASP.NET server, you will need to include the value of the __VIEWSTATE hidden field in your post. You can get it like this:
$html = curl_exec($ch);
$matches = array();
preg_match(‘/ /’, $html, $matches);
$viewstate = $matches[1];
$viewstate = urlencode($viewstate);
That last urlencode() is the bit that drove me crazy for a while.
btw, CURLOPT_HTTPHEADER expects an array:
$myHeader = array(
«MIME-Version: 1.0»,
«Content-type: text/html; charset=iso-8859-1»,
«Content-transfer-encoding: text»,
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $myHeader);
(hope this saves someone several hours of. )
In recent versions of php, CURLOPT_MUTE has (probably) been deprecated. Any attempt of using curl_setopt() to set CURLOPT_MUTE will give you a warning like this:
PHP Notice: Use of undefined constant CURLOPT_MUTE — assumed ‘CURLOPT_MUTE’ in .
If you wish tu silence the curl output, use the following instead:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
The output of the curl operation will be stored as a string in $curl_output while the operation remains totally silent.
Multipart form uploads (ie simulating the upload of files from a browser form) is surprisingly easy, yet hard to find information on. hope this changes that.
//simulates
$postData[ ‘file_name’ ] = «@test.txt»;
$postData[ ‘submit’ ] = «UPLOAD»;
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1 );
//seems no need to tell it enctype=’multipart/data’ it already knows
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData );
$response = curl_exec( $ch );
//where test.txt is a file in the same directory!
It took me quite some to to figure out how to get Curl (with SSL), OpenSSL and PHP to play nicely together.
After reinstalling MS-VC7 and compiling OpenSSL to finally realise this was’nt nesscary.
If your like me and like *Nix systems more than Windows then you’ll most probly have similar problems.
I came across this, on a simple google with the right keywords.
I read thru that and found my mistake.
Its just a small list of notes, I found them to be the best I’ve found on the subject and the most simplist.
Dont forget to add a simple line like this into your scripts to get them working on Win32.
if( $WINDIR ) curl_setopt ( $curl , CURLOPT_CAINFO , «c:\\windows\\ca-bundle.crt» );
?>
Last note: ca-bundle.crt file is located in the Curl download. I stored mine in the windows directory and apache/php can access it fine.
All the best and I hope this helps.
Simon Lightfoot
vHost Direct Limited
You can request (and have deflated for you) compressed http (from mod_gzip or ob_gzhandler, for instance) by using the following:
This seems to work fine with the latest php (4.3.4) curl (7.11.0) and zlib (1.1.4) under linux. This is much more elegant than forcing the Accept-Encode header and using gzdeflate on an edited result.
I know that many people suffer from cURL when trying to send XML data. I solved this problem and want to share it with you:
I was trying to send SMS messages with a SMS service provider. They gave me the following ASP code, where you send data as XML and receive a response in XML as well:
url = «http://. someaddress/somefile.asp»;
xmldata =» many other tags, data here «;
Set ob = Server.CreateObject(«Msxml2.XMLHTTP»)
ob.Open «POST»,url,false
ob.setRequestHeader «Content-Type», «application/x-www-form-urlencoded»
ob.Send xmldata
. then recieve code was here.
This is done in PHP using cURL library in this way:
= » sameas above »
$url = «..same URL as above..» ;
$ch = curl_init (); // initialize curl handle
curl_setopt ( $ch , CURLOPT_URL , $url ); // set url to post to
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 ); // return into a variable
curl_setopt ( $ch , CURLOPT_TIMEOUT , 4 ); // times out after 4s
curl_setopt ( $ch , CURLOPT_POSTFIELDS , $XPost ); // add POST fields
$result = curl_exec ( $ch ); // run the whole process
echo $result ; //contains response from server
?>
Some say that you should use CURLOPT_CUSTOMREQUEST, CURLOPT_HTTPHEADER and etc. to perform this task , as you can see you don’t need those at all.
Hope it will help those who tries to simulate Msxml2.XMLHTTP or simply try sending XML data over PHP.
Regards,
Muhammed Mamedov
Here’s how I was able to post arrays using Curl:
$array_of_vars[]=»var1″;
$array_of_vars[]=»var2″;
$array_of_vars[]=»var3″;
$array_of_vars[]=»var4″;
i had problems with receiving all of the data that was replied to me about a transaction, atlast after way too much time spent i found out that all i missed was:
curl_setopt($ch, CURLOPT_HEADER, 1);
hope it helped anyone
The following scripts show how to post form to a web server via https. I modified rodrigo posting because it did not work for me on IIS5.
= ‘ https://www.yourserver.com/yourrequest;
$params = «name=your_name&email=youremail@mail.com»;
$user_agent = «Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)»;
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // this line makes it work under https
$result=curl_exec ($ch);
curl_close ($ch);
The script shows how to get a simple response of a SSL Server. Enjoy it!
$_url = ‘https://www.example.com.br’ ;
$_VAR001 = ‘nono’ ;
$_VAR002 = ‘nonono’ ;
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_POST , 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , $params );
curl_setopt ( $ch , CURLOPT_URL , $_url );
curl_setopt ( $ch , CURLOPT_SSL_VERIFYHOST , 2 );
curl_setopt ( $ch , CURLOPT_USERAGENT , $defined_vars [ ‘HTTP_USER_AGENT’ ]);
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 );
$result = curl_exec ( $ch );
curl_close ( $ch );
echo( «Output: » . $result );
CURL install steps in Mandrake 9.1:
==========================================================
cp -r /usr/src/php-devel/extensions/curl /tmp/curl
cd /tmp/curl
phpize
./configure
make install
echo «extension = curl.so» > /etc/php/90_curl.ini
look in phpinfo, the string:
/etc/php/90_curl.ini
Needs these tools:
autoconf
automake
libtool
m4
php430-devel-430-11mdk.rpm
Some docs:
/usr/share/doc/php430-devel-430/SELF-CONTAINED-EXTENSIONS
IMHO the example code is somewhat confusing; the fopen() and fclose() are not needed at all, AFAICT.
By default the resulting data/page of the external server is just printed out. To assign the result of the curl session to a variable, one can use
— output buffering (see ob_start(), ob_get_contents())
— curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
With the latter, the result of curl_exec is the actual data instead of a boolean.
function curl_string ($url,$user_agent,$proxy)<
<>
$ch = curl_init();
curl_setopt ($ch, CURLOPT_PROXY, $proxy);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt ($ch, CURLOPT_COOKIEJAR, «c:\cookie.txt»);
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_TIMEOUT, 120);
$result = curl_exec ($ch);
curl_close($ch);
return $result;
$url_page = «http://www.google.com/»;
$user_agent = «Mozilla/4.0»;
$proxy = «http://208.25.243.167:8080»;
$string = curl_string($url_page,$user_agent,$proxy);
echo $string;
this could hep someone
Sorin
Here’s a little code snippet if you need the last-modified-time for a remote file as filemtime() does not work on those.
$modified = «»;
function read_header($ch, $header)
<
global $modified;
$length = strlen($header);
if(strstr($header, «Last-Modified:»))
<
$modified = substr($header, 15);
>
return $length;
>
function last_mod($remote_file)
<
global $modified;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_file);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, ‘read_header’);
$headers = curl_exec ($ch);
curl_close ($ch);
return $modified;
>
use something like
echo strtotime(last_mod(«http://www.php.net/»));
to get the time as an Unix timestamp or
echo last_mod(«http://www.php.net/»);
to get the gmdate()-like time.
If you want to Curl to follow redirects and you would also like Curl to echo back any cookies that are set in the process, use this:
For Win2000: To get the 4.3.1 curl dll to work with https you now need to download the latest win32 curl library from http://curl.haxx.se and snag the ca-bundle.crt file from the lib directory. Place this somewhere handy on your webserver.
Then in your PHP script, add the following setopt line to the rest of your curl_setopt commands:
curl_setopt($ch, CURLOPT_CAFILE, ‘C:\pathto\ca-bundle.crt’)
This worked for me and allowed me to discontinue using the CURLOPT_SSL_VERIFYPEER set to zero hack.
If anybody has problems with getting new curl working with older version of php then .
I got stuck with installing curl-7.10.2+php 4.0.6 or better said configuring PHP with mentioned version of curl.
After some hopeless attempts to configure curl support into PHP I saw an error message:
«checking for cURL greater than or equal to 7.8. ./configure: line 11725: test: 070a02: integer expression expected»
after which configure said: «configure: error: cURL version 7.8 or later is required to compile php with cURL support»
On the mentioned line «test» is used to compare verion from curl-sonfig with preset value 70800 but . test expects both values to be integer. From verson 7.8 curl outputs its version in hex.
I did’nt had the time to think about fixing this — I just deleted lines responsible and got curl working
I wanted to import an https Web pages thanks to fopen(«https://xxx», «r») or fsockopen but as far as I read, it was only possible with cURL extension (to get these functions worked with https, we have to wait the PHP 4.3 release, TBC) , so I installed it and it worked. It is quite easy, but I spend to much time on it:
First of all, here is the most important: WE DON’T NEED to compile anything to get curl worked. All the extensions that we need are already in the PHP 4.2.3 zip. So here are the instructions and links to get Apache + PHP + CURL work properly:
Downloads:
=> Apache Web server with Openssl included:
http://www.modssl.org/contrib/ftp/contrib/ Apache_1.3.26-Mod_SSL_2.8.9-OpenSSL_0.9.6d-WIN32.zip
=> Optional: Openssl zip to get libeay32.dll and ssleay32.dll (I didn’t need them because I used those stored in PHP zip)
http://www.modssl.org/contrib/ftp/contrib/ OpenSSL-0.9.6d-win32_RAR3_Archive_.rar
Installs:
=> Unzip Apache in Program Files folder(there should be no problem with the blank in the path):
=> Follow those instructions: http://tud.at/programm/apache-ssl-win32-howto.php3 . I didn’t exactly do what they wrote but it helped a lot. I created the test certificat thanks to this link in order to test my Apache server with SSL.
=> Configure httpd (easy to find on the Web) and test Apache before going on, it avoids problems.
I just changed the Port from 80 (http) to 443 (https) in httpd, I only wanted to perform https.
I didn’t try to get the both working together.
=> Unzip PHP in C:\Php path (don’t install it in Program Files folder, you would have troubles because of the blank this time. )
=> Configure PHP : http://www.php.net/manual/en/install.windows.php #install.windows.manual
WARNING: php.ini MUST be stored into the c:\winnt folder and the dlls must be stored into the c:\winnt\system32 folder.
=> Test it with Apache and phpinfo() function.
cURL:
To add cURL extension, YOU DON’T NEED to compile anything.
All the extensions that you need are in the C:\php\extensions folder. To add cURL or any other extensions:
=> Have the libeay32.dll and ssleay32.dll in the system32 folder (already done if you installed PHP)
=> Copy all dlls from php/dll/ folder to winnt/system32/ (libeay32.dll and ssleay32.dll are already there if you followed
the previous steps)
=> Remove the «;» in front of extension=php_curl.dll in php.ini.
Those instructions come from: http://www.php.net/manual/en/install.windows.php #install.windows.extensions
And it should work, just test it with curl functions into your php script.
For an exaplanation of those Predefined Constants listed above see the following URL:
If you want to write your entire HTTP request without use any other CURL functions like CURLOPT_POST specify it within a curl_setopt ($ch,CURLOPT_CUSTOMREQUEST , $req) line;
Where $req looks like (let me imagine a POST request. ):
POST /destination/script HTTP/1.1
Content-length: xxx
Content-type: text/xml
host: yourhost
accept: */*
accept-encoding: gzip, deflate
accept-language: en-us
connection: close; Keep-Alive
.
your POST data
.
CURLOPT_CUSTOMREQUEST is not documented. but it’s useful and amazing!
I used to download www pages to my script and one of the pages was different in MS explorer and different, when I downloaded it. Namely, information, I was really interested in was missing. That was because the server on the other bank of the river was looking at who is downloading the page. Everything got fixed when I pretended I was MSIE. It is done with curl. Here is a function, that you may use in similar situation
function download_pretending($url,$user_agent) <
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close ($ch);
return $result;
>
XVIII. CURL, Client URL Library Functions
PHP supports libcurl, a library created by Daniel Stenberg, that allows you to connect and communicate to many different types of servers with many different types of protocols. libcurl currently supports the http, https, ftp, gopher, telnet, dict, file, and ldap protocols. libcurl also supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading (this can also be done with PHP’s ftp extension), HTTP form based upload, proxies, cookies, and user+password authentication.
These functions have been added in PHP 4.0.2.
To use PHP’s CURL support you must also compile PHP —with-curl[=DIR] where DIR is the location of the directory containing the lib and include directories. In the «include» directory there should be a folder named «curl» which should contain the easy.h and curl.h files. There should be a file named libcurl.a located in the «lib» directory. Beginning with PHP 4.3.0 you can configure PHP to use CURL for URL streams —with-curlwrappers .
Note to Win32 Users: In order to enable this module on a Windows environment, libeay32.dll and ssleay32.dll must be present in your PATH.
You don’t need libcurl.dll from the CURL site.
The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.
Can I include CURL library in my PHP script as a > Ask Question
I want to use CURL library but I don’t want to install it in a hard way
I just want to do something like this
I am not sure if this possible or not? and where can I found this CURL class?
4 Answers 4
PHP requires that its built with the cURL library, see:
So you would install libcurl-devel for your system and then compile PHP with
If you installed it in a non-standard location.
You’re copy of PHP is either going to have to have been built with Curl, or dynamically load it in (because Curl is not originally written in PHP, it’s a C library).
Create a simple script that calls phpinfo(). If curl was built in, it should show up on this page.
There is a Pure PHP Curl implementation called libCurlEmu
Just bear in mind: you should only use this kind of stuff as a last resort if you can’t get the extensions to work.
There is also a standalone version called «MyCurl», that you can include without installation:
i used it in my project and it worked fine with http-requests.
This class provides an alternative implementation of the cURL extension functions in pure PHP.
It automatically detects whether the cURL library is available. If it is not available, it defines several functions with the same names of the cURL extension that use the class to emulate part the original functionality.
Currently it implements the functions: curl_init, curl_exec, curl_setopt and curl_close. Several of the most important options can be set with the curl_setopt function.
although it has some small bugs, it works aftre fixing this:
-
the example doesent work out of the box, cause the domain lazywebmastertools.com is not reacheable
there is an @ needed if the requested domain doesent end with «/»:
if you dont use a proxy, you have to set
if (isset( $this->headers[«location»]) and $this->headers[«location»] > «») <.
Функции curl, client url library
Формирование и выполнение HTTP-запросов, на примере метода POST
В двух словах о модуле.
Имеется некий веб-сайт с картой России, на котором необходимо разместить модуль, публикующий некую картографическую информацию (карты посевов и т.п.).
Осуществеление публикации этой картографической информации происходит на другом сайте.
Но потребовалось разместить модуль публикации картографической информации именно на веб-сайте с картой России (удобно, когда под рукой можно опубликовать что-либо).
Интерес в том, что разработанный модуль работает с помощью библиотеки CURL. Фактически осуществляется имитация действий пользователя на другом сайте.
То есть сервера будут думать, что все запросы идут с одного сайта. Но на самом деле пользователь выполняет их на другом.
CURL – это библиотека функций PHP, с помощью которой можно посылать запросы, например, HTTP, из PHP скрипта. CURL поддерживает такие протоколы как HTTP, HTTPS, FTP и другие. Посылать HTTP запросы можно методами GET, POST, PUT.
CURL может пригодиться в случаях когда необходимо вызвать удаленный скрипт и получить результат или просто сохранить HTML код вызываемой страницы, в общем каждый может найти свое применение но смысл один это то что можно послать запросы в процессе выполнения скрипта.
Пользователю необходимо выбрать четыре формата, так называемого Shapefile слоя, который, как раз и необходдимо опубликовать. Файлы выбираются с компьютера пользователя.
Далее следует ввести русское название — оно будет отображаться для пользователя.
И английское название — оно будет ипользоваться в БД.
Имеется защита от ввода неправильныйх символов. Если в «русском» поле ввести англиские символы, то модуль также сообщит об этом.
Цвет фона и контура слоя также выбирается пользователем. Это единственные поля в форме, необязательные для заполнения. Если пользователь решил их пропустить, то по умолчанию цвет фона будет отображаться синим, а окантовка черной.
Последним обязательным полем для заполнения является выбор группы, к которой будет принадлежать слой.
При правильно заполненной форме, осуществиться вывод сообщения о выполненной операции. Все сообщения приходят непосредственно от сервера, и если оператором была допущена какая-либо ошибка (например, ввел название слоя, которое уже используется), то в уведомлении об этом допущении сообщит сервер.
Публикация картографической информации осуществлена в подсистеме администрирования MapAdmin (это один сайт). Данный процесс необходимо осуществить в подсистеме MapSurfer (а это как раз веб-сайт с картой России, где и нужно разместить модуль), который также следует выполнить в автоматизированном режиме. Другими словами, модуль осуществляет имитацию процесса публикации слоя оператором в подсистеме MapAdmin в подсистеме MapSurfer с осуществлением автоматизации, путем выполнения некоторых функции внедренным модулем.
Так как подсистема MapSurfer является веб-приложением и работает по протоколу HTTP, а модуль публикации внедрен в данную подсистему. Практически при каждом действии оператора в модуле публикации выполняется, так называемый, HTTP-запрос. Это сообщение, которое посылается клиентом (пользователем) серверу.
HTTP определяет форму и назначение сообщений, которыми обмениваются веб-компоненты (клиент и сервер). Протокол представляет собой принцип «запрос-ответ» — клиент отправляет сообщение-запрос, а затем сервер откликается сообщением-ответом. Клиентские запросы обычно выполняются действиями оператора (щелчок мыши).
Данные действия, т.е. имитацию процесса публикации, возможно осуществить с помощью библиотеки CURL, которая выполняется с помощью скриптового языка общего назначения, применяемого для разработки веб-приложений под названием PHP. CURL – библиотека функций, позволяющая взаимодействовать с сервером по различным веб-протоколом, в том числе и HTTP.
Имитация действий оператора сводится к осуществлению HTTP запросов методами:
- POST – передача данных клиента серверу (заполнение формы);
- GET – запрос содержимого;
- PUT – загрузка содержимого;
- DELETE – удаление содержимого;
Разработанный модуль осуществляет запросы методом POST. Он используется для запроса сервера, чтобы тот принял информацию, включенную в запрос, а сервер, в свою очередь, отправил ответ клиенту (оператору), исходя из полученных данных. Для публикации слоя необходимо выполнить несколько таких запросов. Принято решение каждый запрос выполнить в отдельных PHP-скриптах, что увеличивает оптимизацию самого модуля и предотвращает процесс зависания при работе.
При каждом выборе из четырех файлов выполняется POST-запрос, ответом является закодированное наименование файла, которое используется в БД GeoServer. Ответ перехватывается с помощью языка программирования JavaScript. Осуществляется запрос с использованием технологии AJAX, которая позволяет получить данный наименования без перезагрузки страницы. К тому же AJAX, отправляет закодированные наименования файлов в основной PHP-скрипт, где собираются все введенные данные оператором и осуществляется POST-запрос на публикацию слоя. После выполненной операции оператору придет сообщение от сервера о его результате.
Полученный мною опыт
- В данной работе я получил опыт работы с PHP;
- Научился работать с библиотекой CURL. Благодаря ему, узнал, как формируются HTTP-запросы;
- Получил опыт работы с JavaScript и изучил технологию AJAX;
- Опыт с HTML и CSS (работа с фреймоврком Bootstrap);
curl_setopt — Устанавливает параметр для сеанса CURL
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
curl_setopt — Устанавливает параметр для сеанса CURL
Описание
Устанавливает параметр для указанного сеанса cURL.
Список параметров
Дескриптор cURL, полученный из curl_init() .
Устанавливаемый параметр CURLOPT_XXX.
Значение параметра option .
Для следующих значений параметра option , параметр value должен быть типа bool :
Параметр | Устанавливаемое значение value | Замечания |
---|---|---|
CURLOPT_AUTOREFERER | TRUE для автоматической установки поля Referer: в запросах, перенаправленных заголовком Location:. | |
CURLOPT_BINARYTRANSFER | TRUE для возврата необработанного ответа при использовании константы CURLOPT_RETURNTRANSFER . | С PHP 5.1.3 эта опция больше не требуется: необработанный вывод всегда возвращается при использовании опции CURLOPT_RETURNTRANSFER . |
CURLOPT_COOKIESESSION | TRUE для указания текущему сеансу начать новую «сессию» cookies. Это заставит libcurl проигнорировать все «сессионные» cookies, которые она должна была бы загрузить, полученные из предыдущей сессии. По умолчанию, libcurl всегда сохраняет и загружает все cookies, вне зависимости от того, являются ли они «сессионными» или нет. «Сессионные» cookies — это cookies без срока истечения, которые должны существовать только для текущей «сессии». | |
CURLOPT_CERTINFO | TRUE для вывода информации о сертификате SSL в поток STDERR при безопасных соединениях. | Добавлена в cURL 7.19.1. Доступна, начиная с версии PHP 5.3.2. Для корректной работы требует включенной опции CURLOPT_VERBOSE . |
CURLOPT_CONNECT_ONLY | TRUE сообщает библиотеке, чтобы она провела необходимые аутентификацию прокси и настройку соединения, но не передавала данные. Эта опция реализована для HTTP, SMTP и POP3. | Добавлена в 7.15.2. Доступна с версии PHP 5.5.0. |
CURLOPT_CRLF | TRUE для преобразования концов строк Unix в CRLF. | |
CURLOPT_DNS_USE_GLOBAL_CACHE | TRUE для использования глобального кэша DNS. Этот параметр не является потокобезопасным и по умолчанию включен. | |
CURLOPT_FAILONERROR | TRUE для подробного отчета при неудаче, если полученный HTTP-код больше или равен 400. Поведение по умолчанию возвращает страницу как обычно, игнорируя код. | |
CURLOPT_FILETIME | TRUE для попытки получения даты модификации удаленного документа. Это значение может быть получено с помощью параметра CURLINFO_FILETIME из функции curl_getinfo() . | |
CURLOPT_FOLLOWLOCATION | TRUE для следования любому заголовку «Location: «, отправленному сервером в своем ответе (учтите, что это происходит рекурсивно, PHP будет следовать за всеми посылаемыми заголовками «Location: «, за исключением случая, когда установлена константа CURLOPT_MAXREDIRS ). | |
CURLOPT_FORBID_REUSE | TRUE для принудительного закрытия соединения после завершения его обработки так, чтобы его нельзя было использовать повторно. | |
CURLOPT_FRESH_CONNECT | TRUE для принудительного использования нового соединения вместо закэшированного. | |
CURLOPT_FTP_USE_EPRT | TRUE для использования EPRT (и LPRT) при активных FTP загрузках. Используйте FALSE для того, чтобы отключить EPRT и LPRT и использовать только PORT. | |
CURLOPT_FTP_USE_EPSV | TRUE для первоначальной пробы команды EPSV при FTP передачах. Если команда не удалась, будет произведен обратный откат к PASV. Установите в FALSE для отключения EPSV. | |
CURLOPT_FTP_CREATE_MISSING_DIRS | TRUE для создания отсутствующих директорий, если FTP-операция обнаруживает несуществующий путь. | |
CURLOPT_FTPAPPEND | TRUE для записи удаленного файла в конец, вместо перезаписывания его поверх существующего файла. | |
CURLOPT_TCP_NODELAY | Задает на постоянной основе должна ли опция TCP_NODELAY установлена или очищена (1 = установлена, 0 = очищена). По умолчанию опция очищается. | Доступна с версии PHP 5.2.1 для версий собранных с libcurl 7.11.2 или новее. |
CURLOPT_FTPASCII | Псевдоним CURLOPT_TRANSFERTEXT . Используйте его вместо этого. | |
CURLOPT_FTPLISTONLY | TRUE для возврата только списка имен из FTP директории. | |
CURLOPT_HEADER | TRUE для включения заголовков в вывод. | |
CURLINFO_HEADER_OUT | TRUE для отслеживания строки запроса дескриптора. | Доступен, начиная с версии PHP 5.1.3. Префикс CURLINFO_ употреблен специально. |
CURLOPT_HTTPGET | TRUE для сброса метода HTTP-запроса в метод GET. Так как GET используется по умолчанию, этот параметр необходим только в случае, если метод запроса был ранее изменен. | |
CURLOPT_HTTPPROXYTUNNEL | TRUE для туннелирования через указанный HTTP-прокси. | |
CURLOPT_MUTE | TRUE для полного отключения сообщений функций cURL. | Удалена в cURL 7.15.5 (Можно использовать опцию CURLOPT_RETURNTRANSFER) |
CURLOPT_NETRC | TRUE для считывания файла
/.netrc на предмет логина и пароля для удаленного сайта, с которым устанавливается соединение. |
|
CURLOPT_NOBODY | TRUE для исключения тела ответа из вывода. Метод запроса устанавливается в HEAD. Смена этого параметра в FALSE не меняет его обратно в GET. | |
CURLOPT_NOPROGRESS | ||
CURLOPT_NOSIGNAL | TRUE для игнорирования любой функции cURL, посылающей сигналы PHP процессу. Этот параметр включен по умолчанию в многопоточных SAPIs для корректной работы таймаут параметров. | Добавлен в версии cURL 7.10. |
CURLOPT_POST | TRUE для использования обычного HTTP POST. Данный метод POST использует обычный application/x-www-form-urlencoded, обычно используемый в HTML-формах. | |
CURLOPT_PUT | TRUE для загрузки файла методом HTTP PUT. Используемый файл должен быть установлен с помощью параметров CURLOPT_INFILE и CURLOPT_INFILESIZE . | |
CURLOPT_RETURNTRANSFER | TRUE для возврата результата передачи в качестве строки из curl_exec() вместо прямого вывода в браузер. | |
CURLOPT_SAFE_UPLOAD | TRUE для отключения поддержки префикса @ для загружаемых файлов в CURLOPT_POSTFIELDS , который означает, что значения, переданные с @ могут безопасно передаваться в виде полей. Вместо префикса можно использовать опцию CURLFiled. | Добавлена в PHP 5.5.0 со значением по умолчанию FALSE . В PHP 5.6.0 стала по умолчанию равна TRUE . |
CURLOPT_SSL_VERIFYPEER | FALSE для остановки cURL от проверки сертификата узла сети. Альтернативные сверяемые сертификаты могут быть указаны с помощью параметра CURLOPT_CAINFO или директории с сертификатами, указываемой параметром CURLOPT_CAPATH . | По умолчанию равно TRUE начиная с версии cURL 7.10. Дистрибутив по умолчанию устанавливается начиная с версии cURL 7.10. |
CURLOPT_TRANSFERTEXT | TRUE для использования ASCII режима при FTP передачах. При использовании LDAP данные возвращаются простым текстом вместо HTML. В Windows системах поток STDOUT не устанавливается в бинарный режим. | |
CURLOPT_UNRESTRICTED_AUTH | TRUE для продолжения посылки логина и пароля при редиректах (при использовании CURLOPT_FOLLOWLOCATION ), даже при изменении имени хоста. | |
CURLOPT_UPLOAD | TRUE для подготовки к загрузке файла на сервер. | |
CURLOPT_VERBOSE | TRUE для вывода дополнительной информации. Записывает вывод в поток STDERR, или файл, указанный параметром CURLOPT_STDERR . |
Для следующих значений параметра option , параметр value должен быть типа integer :
Параметр | Устанавливаемое значение value | Замечания |
---|---|---|
CURLOPT_BUFFERSIZE | Размер буфера, используемого при каждом чтении. Однако, нет никакой гарантии что данный запрос будет завершен. | Добавлен в версии cURL 7.10. |
CURLOPT_CLOSEPOLICY | Одна из констант CURLCLOSEPOLICY_* .
Эта опция устарела, так как никогда не была реализована в cURL и не работала. |
Удалена в PHP 5.6.0. |
CURLOPT_CONNECTTIMEOUT | Количество секунд ожидания при попытке соединения. Используйте 0 для бесконечного ожидания. | |
CURLOPT_CONNECTTIMEOUT_MS | Количество миллисекунд ожидания при попытке соединения. Используйте 0 для бесконечного ожидания. Если библиотека libcurl скомпилирована с использованием стандартного системного преобразователя имен, то соединение будет по-прежнему использовать полносекундное ожидание в качестве тайм-аута с минимально допустимым тайм-аутом в 1 секунду. | Добавлен в версии cURL 7.16.2. Доступно, начиная с версии PHP 5.2.3. |
CURLOPT_DNS_CACHE_TIMEOUT | Количество секунд, в течение которых в памяти хранятся DNS-записи. По умолчанию этот параметр равен 120 (2 минуты). | |
CURLOPT_FTPSSLAUTH | Метод FTP аутентификации (в активном режиме): CURLFTPAUTH_SSL (сначала проверяется SSL), CURLFTPAUTH_TLS (сначала проверяется TLS) или CURLFTPAUTH_DEFAULT (cURL решает сама). | Добавлен в версии cURL 7.12.2. |
CURLOPT_HTTP_VERSION | CURL_HTTP_VERSION_NONE (по умолчанию, CURL сама выбирает используемую версию), CURL_HTTP_VERSION_1_0 (принудительное использование HTTP/1.0), or CURL_HTTP_VERSION_1_1 (принудительное использование HTTP/1.1). | |
CURLOPT_HTTPAUTH |
Используемые HTTP методы авторизации. Используемые параметры: CURLAUTH_BASIC , CURLAUTH_DIGEST , CURLAUTH_GSSNEGOTIATE , CURLAUTH_NTLM , CURLAUTH_ANY , and CURLAUTH_ANYSAFE . Можно использовать побитовый оператор | (или) для комбинации нескольких методов вместе. В этом случае cURL опросит сервер на предмет поддерживаемых методов авторизации и выберет лучший из них. CURLAUTH_ANY — это псевдоним CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. CURLAUTH_ANYSAFE — это псевдоним CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. | |
CURLOPT_INFILESIZE | Ожидаемый размер файла, в байтах, при загрузке файла на удаленный сервер. Учтите, что использование этой опции не остановит дальнейшую посылку данных, превышающих это значение, так как посылаемые данные зависят от результата CURLOPT_READFUNCTION . | |
CURLOPT_LOW_SPEED_LIMIT | Верхний порог скорости передачи данных, в байтах в секунду. Проверка происходит в течение CURLOPT_LOW_SPEED_TIME секунд, после чего PHP считает передачу слишком медленной и прерывает ее. | |
CURLOPT_LOW_SPEED_TIME | Максимальное количество секунд, в течение которых скорость передачи не должна превышать CURLOPT_LOW_SPEED_LIMIT , иначе PHP пометит передачу как слишком медленную и прекратит ее. | |
CURLOPT_MAXCONNECTS | Максимальное количество постоянных соединений. При достижении лимита для определения закрываемого соединения используется параметр CURLOPT_CLOSEPOLICY . | |
CURLOPT_MAXREDIRS | Максимальное количество принимаемых редиректов. Используйте этот параметр вместе с параметром CURLOPT_FOLLOWLOCATION . | |
CURLOPT_PORT | Альтернативный порт соединения. | |
CURLOPT_POSTREDIR | Битовая маска, содержащая 1 (301 Moved Permanently), 2 (302 Found) и 4 (303 See Other), чтобы задавать должен ли метод HTTP POST обрабатываться при включенной опции CURLOPT_FOLLOWLOCATION , если произошел указанный тип перенаправления. | Добавлено в cURL 7.19.1. Доступно с PHP 5.3.2. |
CURLOPT_PROTOCOLS | Добавлен в версии cURL 7.19.4. | |
CURLOPT_PROXYAUTH | Методы авторизации HTTP, используемые при соединении с прокси-сервером. Используйте те же самые битовые маски, которые были описаны у параметра CURLOPT_HTTPAUTH . В данный момент для авторизации прокси поддерживаются только CURLAUTH_BASIC и CURLAUTH_NTLM . | Добавлен в версии cURL 7.10.7. |
CURLOPT_PROXYPORT | Номер порта прокси-сервера, к которому осуществляется соединение. Этот номер также может быть установлен с помощью параметра CURLOPT_PROXY . | |
CURLOPT_PROXYTYPE | Либо CURLPROXY_HTTP (по умолчанию), либо CURLPROXY_SOCKS5 . | Добавлен в версии cURL 7.10. |
CURLOPT_REDIR_PROTOCOLS | Битовая маска из значений CURLPROTO_* . Данная битовая масска ограничивает протоколы используемые libcurl при редиректе (при включенном параметре CURLOPT_FOLLOWLOCATION ). Это позволяет ограничить набор используемых протоколов при редиректах для некоторых передач. По умолчанию, libcurl поддерживает все протоколы, кроме FILE и SCP. В версиях, предшествовавших 7.19.4, перенаправление использовалось для всех протоколов без исключения. Смотрите также описание параметра CURLOPT_PROTOCOLS для списка констант со значениями протоколов. | Добавлен в версии cURL 7.19.4. |
CURLOPT_RESUME_FROM | Смещение начала передачи, в байтах. | |
CURLOPT_SSL_VERIFYHOST | Используйте 1 для проверки существования общего имени в сертификате SSL. Используйте 2 для проверки существования общего имени и также его совпадения с указанным хостом. В боевом окружении значение этого параметра должно быть 2 (установлено по умолчанию). | Поддержка значения 1 убрана в cURL 7.28.1 |
CURLOPT_SSLVERSION | Одна из констант CURL_SSLVERSION_DEFAULT (0), CURL_SSLVERSION_TLSv1 (1), CURL_SSLVERSION_SSLv2 (2), CURL_SSLVERSION_SSLv3 (3), CURL_SSLVERSION_TLSv1_0 (4), CURL_SSLVERSION_TLSv1_1 (5) или CURL_SSLVERSION_TLSv1_2 (6).
Рекомендуется не устанавливать эту опцию и оставить значение по умолчанию. Установка в 2 или 3 опасно и допускает применение известных уязвимостей в SSLv2 и SSLv3. |
|
CURLOPT_TIMECONDITION | Способ трактовки параметра CURLOPT_TIMEVALUE . Используйте CURL_TIMECOND_IFMODSINCE для возвращения страницы, только если она была изменена со времени, указанного в параметре CURLOPT_TIMEVALUE . Если страница не была изменена, вернется заголовок «304 Not Modified», подразумевая, что параметр CURLOPT_HEADER установлен в TRUE . Используйте CURL_TIMECOND_IFUNMODSINCE для обратного эффекта. По умолчанию используется CURL_TIMECOND_IFMODSINCE . | |
CURLOPT_TIMEOUT | Максимально позволенное количество секунд для выполнения cURL-функций. | |
CURLOPT_TIMEOUT_MS | Максимально позволенное количество миллисекунд для выполнения cURL-функций. Если libcurl собрана с использованием обычного системного распознавателя имен, то этот промежуток соединения все еще будет использовать секундное округление таймаутов, с минимально разрешенным таймаутом в одну секунду. | Добавлен в версии cURL 7.16.2. Доступен, начиная с версии PHP 5.2.3. |
CURLOPT_TIMEVALUE | Количество секунд, начиная с 1 января 1970 года. Это время будет использовано параметром CURLOPT_TIMECONDITION . По умолчанию, используется параметр CURL_TIMECOND_IFMODSINCE . | |
CURLOPT_MAX_RECV_SPEED_LARGE | Если скорость скачки превысит это значение (указанное в байтах в секунду) в среднем в течение всей передачи, то скачка будет приостановлена для поддержания средней скорости меньше либо равной данному параметру. По умолчанию скорость не ограничивается. | Добавлен в версии cURL 7.15.5. Доступен, начиная с версии PHP 5.4.0. |
CURLOPT_MAX_SEND_SPEED_LARGE | Если загрузка на сервер превысит это значение (указанное в байтах в секунду) в среднем в течение всей передачи, то загрузка будет приостановлена для поддержания средней скорости меньше либо равной данному параметру. По умолчанию скорость не ограничивается. | Добавлен в версии cURL 7.15.5. Доступен, начиная с версии PHP 5.4.0. |
CURLOPT_SSH_AUTH_TYPES | Битовая маска, состоящая из одной или более констант: CURLSSH_AUTH_PUBLICKEY , CURLSSH_AUTH_PASSWORD , CURLSSH_AUTH_HOST , CURLSSH_AUTH_KEYBOARD . Установите CURLSSH_AUTH_ANY для того, чтобы libcurl выбрал одну из них самостоятельно. | Добавлено в cURL 7.16.1. |
CURLOPT_IPRESOLVE | Позволяет приложению выбрать вид IP адреса, с которым определяется имя хоста. Это необходимо, если используется имя хоста, которое получается с использованием более одной версии IP адреса. Возможными значениями могут быть CURL_IPRESOLVE_WHATEVER , CURL_IPRESOLVE_V4 , CURL_IPRESOLVE_V6 , и по умолчанию CURL_IPRESOLVE_WHATEVER . | Добавлено в cURL 7.10.8. |
Для следующих значений параметра option , параметр value должен быть типа string :
Параметр | Устанавливаемое значение value | Замечания |
---|---|---|
CURLOPT_CAINFO | Имя файла, содержащего один или более сертификатов, с которыми будут сверяться узлы. Этот параметр имеет смысл только при использовании совместно с CURLOPT_SSL_VERIFYPEER . | Требует абсолютный путь. |
CURLOPT_CAPATH | Директория, содержащая несколько CA сертификатов. Используйте этот параметр совместно с CURLOPT_SSL_VERIFYPEER . | |
CURLOPT_COOKIE | Содержимое заголовка «Cookie: «, используемого в HTTP-запросе. Обратите внимание, что несколько cookies разделяются точкой с запятой с последующим пробелом (например, «fruit=apple; colour=red«) | |
CURLOPT_COOKIEFILE | Имя файла, содержащего cookies. Данный файл должен быть в формате Netscape или просто заголовками HTTP, записанными в файл. Если в качестве имени файла передана пустая строка, то cookies сохраняться не будут, но их обработка все еще будет включена. | |
CURLOPT_COOKIEJAR | Имя файла, в котором будут сохранены все внутренние cookies текущей передачи после закрытия дескриптора, например, после вызова curl_close. | |
CURLOPT_CUSTOMREQUEST | ||
CURLOPT_EGDSOCKET | Наподобие CURLOPT_RANDOM_FILE , за исключением того, что имя файла устанавливается в сокет Entropy Gathering Daemon. | |
CURLOPT_ENCODING | Содержимое заголовка «Accept-Encoding: «. Это позволяет декодировать запрос. Поддерживаемыми кодировками являются «identity», «deflate» и «gzip». Если передана пустая строка, «», посылается заголовок, содержащий все поддерживаемые типы кодировок. | Добавлен в версии cURL 7.10. |
CURLOPT_FTPPORT | Значение, которое будет использоваться для определения IP-адреса для команды «PORT» FTP-протокола. Команда «PORT» сообщает серверу, с каким IP-адресом он должен устанавливать соединение. Это может быть IP-адрес, имя хоста, имя сетевого интерфейса (под Unix), или просто ‘-‘ для использования системного IP-адреса по умолчанию. | |
CURLOPT_INTERFACE | Имя используемого сетевого интерфейса. Может быть именем интерфейса, IP адресом или именем хоста. | |
CURLOPT_KEYPASSWD | Пароль, который требуется для использования приватного ключа CURLOPT_SSLKEY или CURLOPT_SSH_PRIVATE_KEYFILE . | Добавлено в cURL 7.16.1. |
CURLOPT_KRB4LEVEL | Уровень безопасности KRB4 (Kerberos 4). Любое из следующих значений (в порядке от слабого к самому сильному) корректно: «clear», «safe», «confidential», «private».. Если указанная строка отличается от данных значений, будет использовано значение «private». Установка этого параметра в NULL полностью отключит безопасность KRB4. На данный момент безопасность KRB4 работает только с FTP транзакциями. | |
CURLOPT_POSTFIELDS | Все данные, передаваемые в HTTP POST-запросе. Для передачи файла, укажите перед именем файла @, а также используйте полный путь к файлу. Тип файла также может быть указан с помощью формата ‘;type=mimetype‘, следующим за именем файла. Этот параметр может быть передан как в качестве url-закодированной строки, наподобие ‘para1=val1¶2=val2&. ‘, так и в виде массива, ключами которого будут имена полей, а значениями — их содержимое. Если value является массивом, заголовок Content-Type будет установлен в значение multipart/form-data. Начиная с версии PHP 5.2.0, при передаче файлов с префиксом @, value должен быть массивом. С версии PHP 5.5.0, префикс @ устарел и файлы можно отправлять с помощью CURLFile. Префикс @ можно отключить, чтобы можно было передавать значения, начинающиеся с @, задав опцию CURLOPT_SAFE_UPLOAD в значение TRUE . | |
CURLOPT_PROXY | HTTP-прокси, через который будут направляться запросы. | |
CURLOPT_PROXYUSERPWD | Логин и пароль, записанные в виде «[username]:[password]», используемые при соединении через прокси. | |
CURLOPT_RANDOM_FILE | Имя файла, используемого для инициализации генератора случайных чисел для SSL. | |
CURLOPT_RANGE | Диапазон данных, которые нужно загрузить, в формате «X-Y», причем либо X, либо Y могут быть опущены. Протокол HTTP также поддерживает передачу нескольких диапазонов, разделенных запятыми, они задаются в формате «X-Y,N-M». | |
CURLOPT_REFERER | Содержимое заголовка «Referer: «, который будет использован в HTTP-запросе. | |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | Строка, содержащая 32 шестнадцатеричных цифры. Строка должна являться контрольной суммой по алгоритму MD5 публичного ключа удаленного компьютера и libcurl будет сбрасывать соединение к удаленному хосту до тех пор, пока контрольная сумма не будет соответствовать публичному ключу. Эта опция предназначена только для передачи данных с помощью SCP и SFTP. | Добавлено в cURL 7.17.1. |
CURLOPT_SSH_PUBLIC_KEYFILE | Имя файла для вашего публичного ключа. Если не задано, то libcurl использует по умолчанию файл $HOME/.ssh/id_dsa.pub, если переменная окружения HOME установлена и файл «id_dsa.pub» в текущей директории, если переменная HOME не установлена. | Добавлено в cURL 7.16.1. |
CURLOPT_SSH_PRIVATE_KEYFILE | Имя файла для вашего приватного ключа. Если не задано, то libcurl использует по умолчанию файл $HOME/.ssh/id_dsa, если переменная окружения HOME установлена и файл «id_dsa» в текущей директории, если переменная HOME не установлена. Если файл защищен паролем, установите пароль с помощью CURLOPT_KEYPASSWD . | Добавлено в cURL 7.16.1. |
CURLOPT_SSL_CIPHER_LIST | Список шифров, используемый в SSL-передачах. Например, RC4-SHA и TLSv1 являются корректными списками шифров. | |
CURLOPT_SSLCERT | Имя файла с корректно отформатированным PEM-сертификатом. | |
CURLOPT_SSLCERTPASSWD | Пароль, необходимый для использования сертификата CURLOPT_SSLCERT . | |
CURLOPT_SSLCERTTYPE | Формат сертификата. Поддерживаются форматы «PEM» (по умолчанию), «DER» и «ENG». | Добавлен в версии cURL 7.9.3. |
CURLOPT_SSLENGINE | Идентификатор механизма шифрования для закрытого ключа SSL, указанного в параметре CURLOPT_SSLKEY . | |
CURLOPT_SSLENGINE_DEFAULT | Идентификатор механизма шифрования, используемого для ассиметричных операций шифрования. | |
CURLOPT_SSLKEY | Имя файла с закрытым ключом SSL. | |
CURLOPT_SSLKEYPASSWD | ||
CURLOPT_SSLKEYTYPE | Тип закрытого ключа SSL, указанного в параметре CURLOPT_SSLKEY . Поддерживаются следующие типы ключей: «PEM» (по умолчанию), «DER» и «ENG». | |
CURLOPT_URL | Загружаемый URL. Данный параметр может быть также установлен при инициализации сеанса с помощью curl_init() . | |
CURLOPT_USERAGENT | Содержимое заголовка «User-Agent: «, посылаемого в HTTP-запросе. | |
CURLOPT_USERPWD | Логин и пароль, используемые при соединении, указанные в формате «[username]:[password]». |
Для следующих значений параметра option , параметр value должен быть массивом:
Параметр | Устанавливаемое значение value | Замечания |
---|---|---|
CURLOPT_HTTP200ALIASES | Массив HTTP 200 ответов, которые будут трактоваться корректными ответами, а не ошибочными. | Добавлен в версии cURL 7.10.3. |
CURLOPT_HTTPHEADER | Массив устанавливаемых HTTP-заголовков, в формате array(‘Content-type: text/plain’, ‘Content-length: 100’) | |
CURLOPT_POSTQUOTE | Массив FTP-команд, выполняемых на сервере, после выполнения FTP-запроса. | |
CURLOPT_QUOTE | Массив FTP-команд, выполняемых на сервере, перед выполнением FTP-запроса. |
Для следующих значений параметра option , параметр value должен быть потоковым дескриптором (возвращаемым, например, функцией fopen() ):
Параметр | Устанавливаемое значение value |
---|---|
CURLOPT_FILE | Файл, в который будет записан результат передачи. По умолчанию используется поток вывода STDOUT (окно браузера). |
CURLOPT_INFILE | Файл, из которого должно идти чтение данных, при загрузке на сервер. |
CURLOPT_STDERR | Альтернативное файл для вывода ошибок, используемый вместо потока ошибок STDERR. |
CURLOPT_WRITEHEADER | Файл, в который будут записаны заголовки текущей операции. |
Для следующих значений параметра option , параметр value должен быть правильным именем функции или замыканием:
Параметр | Устанавливаемое значение value |
---|---|
CURLOPT_HEADERFUNCTION | Callback-функция принимает два параметра. Первым параметром является дескриптор cURL, вторым параметром является строка с записываемыми заголовками. Заголовки должны быть записаны с помощью данной callback-функции. Должна возвратить количество записанных байт. |
CURLOPT_PASSWDFUNCTION | Callback-функция принимает три параметра. Первым параметром является дескриптор cURL, вторым параметром является строка с запросом пароля, третьим параметром является максимальная длина пароля. Должна возвратить строку, содержащую пароль. |
CURLOPT_PROGRESSFUNCTION | |
CURLOPT_READFUNCTION | Callback-функция принимает три параметра. Первым параметром является дескриптор cURL, вторым параметром является ресурс потока, переданный cURL через опцию CURLOPT_INFILE , а третьим параметром является максимально разрешенное количество данных для чтения. Callback-функция должна возвратить строку, с длиной не превышающей запрошенного количества данных, обычно с помощью чтения из переданного потокового ресурса. Должна возвратить пустую строку для сигнала о конце файла EOF. |
CURLOPT_WRITEFUNCTION | Callback-функция принимает два параметра. Первым параметром является дескриптор cURL, а вторым параметром является строка с записываемыми данными. Данные должны быть сохранены с помощью данной функции. Она должна возвратить точное количество записанных байт, иначе закачка будет прервана с ошибкой. |
Другие значения:
Параметр | Устанавливаемое значение value |
---|---|
CURLOPT_SHARE | Результат выполнения функции curl_share_init() . Позволяет обработчику cURL использовать данные из общего обработчика. |
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
5.6.0 | Опция CURL_SAFE_UPLOAD теперь имеет значение по умолчанию равное TRUE . |
5.6.0 | Удалена опция CURLOPT_CLOSEPOLICY и связанные с ней значения. |
5.5.0 | Ресурс cURL добавлен первым аргументом в callback-функцию CURLOPT_PROGRESSFUNCTION . |
5.5.0 | Добавлена опция CURLOPT_SHARE . |
5.3.0 | Добавлена опция CURLOPT_PROGRESSFUNCTION . |
5.2.10 | Добавлены параметры CURLOPT_PROTOCOLS и CURLOPT_REDIR_PROTOCOLS . |
5.1.0 | Добавлены параметры CURLOPT_AUTOREFERER , CURLOPT_BINARYTRANSFER , CURLOPT_FTPSSLAUTH , CURLOPT_PROXYAUTH и CURLOPT_TIMECONDITION . |
5.0.0 | Добавлены параметры CURLOPT_FTP_USE_EPRT , CURLOPT_NOSIGNAL , CURLOPT_UNRESTRICTED_AUTH , CURLOPT_BUFFERSIZE , CURLOPT_HTTPAUTH , CURLOPT_PROXYPORT , CURLOPT_PROXYTYPE , CURLOPT_SSLCERTTYPE и CURLOPT_HTTP200ALIASES . |
Примеры
Пример #1 Инициализация сеанса CURL и загрузка web-страницы
// создание нового ресурса cURL
$ch = curl_init ();
// установка URL и других необходимых параметров
curl_setopt ( $ch , CURLOPT_URL , «http://www.example.com/» );
curl_setopt ( $ch , CURLOPT_HEADER , false );
// загрузка страницы и выдача её браузеру
curl_exec ( $ch );
// завершение сеанса и освобождение ресурсов
curl_close ( $ch );
?>
Пример #2 Закачка файла
$data = array( ‘name’ => ‘Foo’ , ‘file’ => ‘@/home/user/test.png’ );
curl_setopt ( $ch , CURLOPT_URL , ‘http://localhost/upload.php’ );
curl_setopt ( $ch , CURLOPT_POST , 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , $data );
Результат выполнения данного примера:
Примечания
Передача массива в CURLOPT_POSTFIELDS закодирует данные в виде multipart/form-data, тогда как передача URL-кодированной строки закодирует данные в виде application/x-www-form-urlencoded.
Смотрите также
- curl_setopt_array() — Устанавливает несколько параметров для сеанса cURL
использование libcurl для доступа к https
иногда требуется получить кое какие данные со страничек отчётов и сохранить локально. для обычных страничек проблем не возникало, но вот захотелось получать баланс счета у местного провайдера, а доступ к этой страничке есть только по https.
для этого пришлось воспользоваться библиотекой libcurl (http://curl.haxx.se/libcurl/)
как-то до этого обходился и без неё.
вот пример того что у меня получилось
/*
* использование cURL для доступа к HTTPS
*/
#include
#include
#include
// функция, вызываемая cURL для записи полученых данных
std :: string curlBuffer ;
size_t curlWriteFunc ( char * data, size_t size, size_t nmemb, std :: string * buffer )
<
size_t result = 0 ;
if ( buffer ! = NULL )
<
buffer — > append ( data, size * nmemb ) ;
result = size * nmemb ;
>
return result ;
>
//
//
//
int main ( int argc, char * argv [ ] )
<
// запрашиваемая страничка(путь до login screen)
const char * url = «МОЙ_ПРОВАЙДЕР/cgi-bin/utm5/aaa5» ;
// передаваемые параметры
const char * urlPOST = «login=ИМЯ&password=ПАСС&cmd=login» ;
// буфер для сохранения текстовых ошибок
char curlErrorBuffer [ CURL_ERROR_SIZE ] ;
CURL * curl = curl_easy_init ( ) ;
if ( curl ) <
//
curl_easy_setopt ( curl, CURLOPT_ERRORBUFFER, curlErrorBuffer ) ;
// задаем URL.
curl_easy_setopt ( curl, CURLOPT_URL, url ) ;
// переходить по «Location:» указаному в HTTP заголовке
curl_easy_setopt ( curl, CURLOPT_FOLLOWLOCATION, 1 ) ;
// не проверять сертификат удаленного сервера
curl_easy_setopt ( curl, CURLOPT_SSL_VERIFYPEER, O ) ;
// использовать метод POST для отправки данных
curl_easy_setopt ( curl, CURLOPT_POST, 1 ) ;
// параметры POST
curl_easy_setopt ( curl, CURLOPT_POSTFIELDS, urlPOST ) ;
// функция, вызываемая cURL для записи полученых данных
curl_easy_setopt ( curl, CURLOPT_WRITEDATA, & curlBuffer ) ;
curl_easy_setopt ( curl, CURLOPT_WRITEFUNCTION, curlWriteFunc ) ;
// выполнить запрос
CURLcode curlResult = curl_easy_perform ( curl ) ;
// завершение сеанса
curl_easy_cleanup ( curl ) ;
if ( curlResult == CURLE_OK )
<
std :: cout curlBuffer std :: endl ;
return ( 0 ) ;
> else <
std :: cout «Ошибка(» curlResult «): » curlErrorBuffer std :: endl ;
return ( — 1 ) ;
>
вот так прошло моё знакомство с этой библиотекой.
ммм… наверное надо сделать автоматическое получение и установку сертификата, пока задумываюсь, а стоит ли это вообще делать.
лучше пока скачаю обертку для с++
FPublisher
Web-технологии: База знаний
Документация PHP
Функции CURL, Client URL Library
Содержание
- curl_close — Завершает сеанс CURL
- curl_copy_handle — Copy a cURL handle along with all of its preferences
- curl_errno — Возвращает код последней ошибки
- curl_error — Возвращает строку с описанием последней ошибки
- curl_exec — Выполняет запрос CURL
- curl_getinfo — Возвращает информацию о последней операции
- curl_init — Инициализирует сеанс CURL
- curl_multi_add_handle — Добавляет обычный cURL дескриптор к набору cURL дескрипторов
- curl_multi_close — Закрывает набор cURL дескрипторов
- curl_multi_exec — Выполняет операции с набором cURL дескрипторов
- curl_multi_getcontent — Возвращает результат операции, если был установлен параметр CURLOPT_RETURNTRANSFER
- curl_multi_info_read — Возвращает информацию о текущих операциях
- curl_multi_init — Создает набор cURL дескрипторов
- curl_multi_remove_handle — Удаляет cURL дескриптор из набора cURL дескрипторов
- curl_multi_select — Возвращает сокеты, созданные модулем cURL
- curl_setopt_array — Set multiple options for a cURL transfer
- curl_setopt — Устанавливает параметр для сеанса CURL
- curl_version — Возвращает версию CURL
Последние поступления:
ТехЗадание на Землю
Размещена 14 марта 2020 года
Пpоект Genesis (из коpпоpативной пеpеписки)
Шпаргалка по работе с Vim
Размещена 05 декабря 2020 года
Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.
Ошибка: Error: Cannot find a val >Размещена 13 сентабря 2020 года
Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/
Linux Optimization
Размещена 30 июля 2012 года