php-doc-en/functions/curl.xml

512 lines
18 KiB
XML
Raw Normal View History

<reference id="ref.curl">
<title>CURL, Client URL Library functions</title>
<titleabbrev>CURL</titleabbrev>
<partintro id="curl.partintro">
<para>
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.
</para>
<para>
In order to use the CURL functions you need to install the
<ulink url="&url.curl;">CURL</ulink> package. PHP requires
that you use CURL 7.0.2-beta or higher. PHP will not work with any version of
CURL below version 7.0.2-beta.
</para>
<para>
To use PHP's CURL support you must also compile PHP
<option role="configure">--with-curl[=DIR]</option> 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.
</para>
<para>
Once you've compiled PHP with CURL support, you can begin using the curl
functions. The basic idea behind the CURL functions is that you initialize a
CURL session using the <function>curl_init()</function>, then you can set
all your options for the transfer via the <function>curl_exec()</function> and
then you finish off your session using the <function>curl_close()</function>.
Here is an example that uses the CURL functions to fetch the PHP homepage into
a file:
<example>
<title>Using PHP's CURL module to fetch the PHP homepage</title>
<programlisting role="php">
&lt;?php
$ch = curl_init ("http://www.php.net/");
$fp = fopen ("php_homepage.txt", "w");
curl_setopt ($ch, CURLOPT_INFILE, $fp);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
fclose ($fp);
?>
</programlisting>
</example>
</para>
</partintro>
<refentry id="function.curl-init">
<refnamediv>
<refname>curl_init</refname>
<refpurpose>Initialize a CURL session</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int
<function>curl_init</function>
</funcdef>
<paramdef>string
<parameter>
<optional>url</optional>
</parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
The <function>curl_init</function> will initialize a new session
and return a CURL handle for use with the <function>curl_setopt</function>,
<function>curl_exec</function>, and <function>curl_close</function>
functions. If the optional <parameter>url</parameter> parameter is supplied
then the CURLOPT_URL option will be set to the value of the parameter.
You can manually set this using the <function>curl_setopt</function>
function.
<example>
<title>Initializing a new CURL session and fetching a webpage</title>
<programlisting role="php">
&lt;?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.zend.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>
</programlisting>
</example>
</para>
<para>
See also: <function>curl_close</function>, <function>curl_setopt</function>
</para>
</refsect1>
</refentry>
<refentry id="function.curl-setopt">
<refnamediv>
<refname>curl_setopt</refname>
<refpurpose>Set an option for a CURL transfer</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>bool
<function>curl_setopt</function>
</funcdef>
<paramdef>int
<parameter>ch</parameter>
</paramdef>
<paramdef>string
<parameter>option</parameter>
</paramdef>
<paramdef>mixed
<parameter>value</parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
The <function>curl_setopt</function> function will set options for a CURL
session identified by the <parameter>ch</parameter> parameter. The
<parameter>option</parameter> parameter is the option you want to set,
and the <parameter>value</parameter> is the value of the option
given by the <parameter>option</parameter>.
</para>
<para>
The <parameter>value</parameter> should be a long for the following
options (specified in the <parameter>option</parameter> parameter):
<itemizedlist>
<listitem>
<simpara>
<parameter>CURLOPT_INFILESIZE</parameter>: When you are uploading
a file to a remote site, this option should be used to tell PHP
what the expected size of the infile will be.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_VERBOSE</parameter>: Set this option to a non-zero
value if you want CURL to report everything that is happening.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_HEADER</parameter>: Set this option to a non-zero
value if you want the header to be included in the output.
</simpara>
</listitem>
<listitem>
<para>
<parameter>CURLOPT_NOPROGRESS</parameter>: Set this option to a non-zero
value if you don't want PHP to display a progress meter for CURL transfers
<note>
<simpara>
PHP automatically sets this option to a non-zero parameter, this should
only be changed for debugging purposes.
</simpara>
</note>
</para>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_NOBODY</parameter>: Set this option to a non-zero value
if you don't want the body included with the output.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_FAILONERROR</parameter>: Set this option to a non-zero
value if you want PHP to fail silently if the HTTP code returned is greater
than 300. The default behaviour is to return the page normally, ignoring
the code.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_UPLOAD</parameter>: Set this option to a non-zero value
if you want PHP to prepare for an upload.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_POST</parameter>: Set this option to a non-zero value
if you want PHP to do a regular HTTP POST. This POST is a normal
application/x-www-from-urlencoded kind, most commonly used by HTML forms.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_FTPLISTONLY</parameter>: Set this option to a non-zero
value and PHP will just list the names of an FTP directory.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_FTPAPPEND</parameter>: Set this option to a non-zero
value and PHP will append to the remote file instead of overwriting it.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_NETRC</parameter>: Set this option to a non-zero value
and PHP will scan your ~./netrc file to find your username and password
for the remote site that you're establishing a connection with.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_FOLLOWLOCATION</parameter>: Set this option to a
non-zero value to follow any "Location: " header that the server sends as
a part of the HTTP header (note this is recursive, PHP will follow as many
"Location: " headers that it is sent.)
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_PUT</parameter>: Set this option a non-zero value to
HTTP PUT a file. The file to PUT must be set with the CURLOPT_INFILE and
CURLOPT_INFILESIZE.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_MUTE</parameter>: Set this option to a non-zero value
and PHP will be completely silent with regards to the CURL functions.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_TIMEOUT</parameter>: Pass a long as a parameter that
contains the maximum time, in seconds, that you'll allow the curl functions
to take.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_LOW_SPEED_LIMIT</parameter>: Pass a long as a parameter
that contains the transfer speed in bytes per second that the transfer should
be below during CURLOPT_LOW_SPEED_TIME seconds for PHP to consider it too
slow and abort.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_LOW_SPEED_TIME</parameter>: Pass a long as a parameter
that contains the time in seconds that the transfer should be below the
CURLOPT_LOW_SPEED_LIMIT for PHP to consider it too slow and abort.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_RESUME_FROM</parameter>: Pass a long as a parameter that
contains the offset, in bytes, that you want the transfer to start from.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_SSLVERSION</parameter>: Pass a long as a parameter that
contains the SSL version (2 or 3) to use. By default PHP will try and
determine this by itself, although, in some cases you must set this
manually.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_TIMECONDITION</parameter>: Pass a long as a parameter
that defines how the CURLOPT_TIMEVALUE is treated. You can set this
parameter to TIMECOND_IFMODSINCE or TIMECOND_ISUNMODSINCE. This is a
HTTP-only feature.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_TIMEVALUE</parameter>: Pass a long as a parameter that
is the time in seconds since January 1st, 1970. The time will be used as
specified by the CURLOPT_TIMEVALUE option, or by default the
TIMECOND_IFMODSINCE will be used.
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
The <parameter>value</parameter> parameter should be a string for the following
values of the <parameter>option</parameter> parameter:
<itemizedlist>
<listitem>
<simpara>
<parameter>CURLOPT_URL</parameter>: This is the URL that you want PHP to
fetch. You can also set this option when initializing a session with the
<function>curl_init</function> function.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_USERPWD</parameter>: Pass a string formatted in the
[username]:[password] manner, for PHP to use for the connection.
connection.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_PROXYUSERPWD</parameter>: Pass a string formatted in
the [username]:[password] format for connection to the HTTP proxy.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_RANGE</parameter>: Pass the specified range you want.
It should be in the "X-Y" format, where X or Y may be left out. The HTTP
transfers also support several intervals, seperated with commas as in
X-Y,N-M.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_POSTFIELDS</parameter>: Pass a string containing the
full data to post in an HTTP "POST" operation.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_REFERER</parameter>: Pass a string containing the
"referer" header to be used in an HTTP request.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_USERAGENT</parameter>: Pass a string containing the
"user-agent" header to be used in an HTTP request.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_FTPPORT</parameter>: Pass a string containing the which
will be used to get the IP address to use for the ftp "PORT" instruction.
The POST instruction tells the remote server to connect to our specified
IP address. The string may be a plain IP address, a hostname, a network
interface name (under UNIX), or just a plain '-' to use the systems default
IP address.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_COOKIE</parameter>: Pass a string containing the
content of the cookie to be set in the HTTP header.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_SSLCERT</parameter>: Pass a string containing the
filename of PEM formatted certificate.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_SSLCERTPASSWD</parameter>: Pass a string containing
the password required to use the CURLOPT_SSLCERT certificate.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_COOKIEFILE</parameter>: Pass a string containing
the name of the file containing the cookiee data. The cookie file can be
in Netscape format, or just plain HTTP-style headers dumped into a file.
</simpara>
</listitem>
<listitem>
<para>
<parameter>CURLOPT_CUSTOMREQUEST</parameter>: Pass a string to be used
instead of GET or HEAD when doing an HTTP request. This is useful for
doing DELETE or another, more obscure, HTTP request.
<note>
<simpara>
Don't do this without making sure your server supports the command
first.
</simpara>
</note>
</para>
</listitem>
</itemizedlist>
</para>
<para>
The following options expect a file descriptor that is obtained by using the
<function>fopen</function> function:
<itemizedlist>
<listitem>
<simpara>
<parameter>CURLOPT_FILE</parameter>: The file where the output of your
transfer should be placed, the default is STDOUT.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_INFILE</parameter>: The file where the input of your
transfer comes from.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_WRITEHEADER</parameter>: The file to write the header
part of the output into.
</simpara>
</listitem>
<listitem>
<simpara>
<parameter>CURLOPT_STDERR</parameter>: The file to write errors to instead
of stderr.
</simpara>
</listitem>
</itemizedlist>
</para>
</refsect1>
</refentry>
<refentry id="function.curl-exec">
<refnamediv>
<refname>curl_exec</refname>
<refpurpose>Perform a CURL session</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>bool
<function>curl_exec</function>
</funcdef>
<paramdef>int
<parameter>ch</parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
This function is should be called after you initialize a CURL session and all the
options for the session are set. Its purpose is simply to execute the predefined
CURL session (given by the <parameter>ch</parameter>).
</para>
</refsect1>
</refentry>
<refentry id="function.curl-close">
<refnamediv>
<refname>curl_close</refname>
<refpurpose>Close a CURL session</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void
<function>curl_close</function>
</funcdef>
<paramdef>int
<parameter>ch</parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
This functions closes a CURL session and frees all ressources.
The CURL handle, <parameter>ch</parameter>, is also deleted.
</para>
</refsect1>
</refentry>
<refentry id="function.curl-version">
<refnamediv>
<refname>curl_version</refname>
<refpurpose>Return the current CURL version</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>string
<function>curl_version</function>
</funcdef>
<void/>
</funcprototype>
</funcsynopsis>
<para>
The <function>curl_version</function> function returns a string containing the
current CURL version.
</para>
</refsect1>
</refentry>
</reference>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->