Функции curl, client url library


Содержание

Функции 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.

Илон Маск рекомендует:  Dos fn 40h писать в файл через описатель

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 слоя, который, как раз и необходдимо опубликовать. Файлы выбираются с компьютера пользователя.

Илон Маск рекомендует:  Что такое код trackpopupmenu

Далее следует ввести русское название — оно будет отображаться для пользователя.

И английское название — оно будет ипользоваться в БД.

Имеется защита от ввода неправильныйх символов. Если в «русском» поле ввести англиские символы, то модуль также сообщит об этом.

Цвет фона и контура слоя также выбирается пользователем. Это единственные поля в форме, необязательные для заполнения. Если пользователь решил их пропустить, то по умолчанию цвет фона будет отображаться синим, а окантовка черной.

Последним обязательным полем для заполнения является выбор группы, к которой будет принадлежать слой.

При правильно заполненной форме, осуществиться вывод сообщения о выполненной операции. Все сообщения приходят непосредственно от сервера, и если оператором была допущена какая-либо ошибка (например, ввел название слоя, которое уже используется), то в уведомлении об этом допущении сообщит сервер.

Публикация картографической информации осуществлена в подсистеме администрирования 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 :

TRUE для отмены индикатора прогресса при передачах cURL.

PHP автоматически устанавливает этот параметр в TRUE , меняйте его только для отладочных целей.

Параметр Устанавливаемое значение 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 :

Битовая маска из значений CURLPROTO_* . Данная маска ограничивает используемые libcurl протоколы. Это позволяет иметь libcurl, работающую с большим количеством протоколов, и ограничивать работу определенных передач только для некоторого их набора. По умолчанию, libcurl использует все поддерживаемые протоколы. Смотрите также параметр CURLOPT_REDIR_PROTOCOLS .

Корректные значения протоколов: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAPS , CURLPROTO_DICT , CURLPROTO_FILE , CURLPROTO_TFTP , CURLPROTO_ALL

Параметр Устанавливаемое значение 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 :

Собственный метод запроса, используемый вместо «GET» или «HEAD» при выполнении HTTP-запроса. Это полезно при запросах «DELETE» или других, более редких HTTP-запросах. Корректными значениями будут слова наподобие «GET», «POST», «CONNECT» и так далее; т.е. не вводите здесь всю строку с HTTP-запросом. Например, указание «GET /index.html HTTP/1.0\r\n\r\n» будет неправильным.

Не используйте эту возможность пока не убедитесь, что сервер поддерживает данный тип запроса.

Тайный пароль, необходимый для использования закрытого ключа SSL, указанного параметром CURLOPT_SSLKEY .

Так как этот параметр содержит ценный пароль, помните, что данный PHP-скрипт нужно хранить в безопасном месте.

Параметр Устанавливаемое значение 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&para2=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 должен быть правильным именем функции или замыканием:

Callback-функция принимает пять параметров. Первый является декскриптором cURL, второй — общим количеством байт, которое ожидается загрузить с сервера, третий — количество уже загруженных байт, четвертый — общее количество байт, которое ожидается отправить на сервер, и пятый — количество уже отправленных байт.

Callback-функция вызывается только, если опция CURLOPT_NOPROGRESS установлена в значение FALSE .

Можно вернуть ненулевое значение, чтобы отменить передачу. В этом случае будет выставлена ошибка CURLE_ABORTED_BY_CALLBACK .

Параметр Устанавливаемое значение 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/)
как-то до этого обходился и без неё. 8)

вот пример того что у меня получилось

/*
* использование 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 ) ;
>

вот так прошло моё знакомство с этой библиотекой.
ммм… наверное надо сделать автоматическое получение и установку сертификата, пока задумываюсь, а стоит ли это вообще делать. 8)
лучше пока скачаю обертку для с++

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 года

Илон Маск рекомендует:  Asp управление сеансами
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL