Curl can use the syntax of the URL to simulate a browser to transfer data,
Because it is a mock browser, it also supports multiple protocols,
Protocols such as FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE, and LDAP can all be well supported, including some:
HTTPS authentication, HTTP POST method, HTTP put method, FTP upload, keyberos authentication, HTTP upload, proxy server, cookies, username/password Authentication,
Download file breakpoint Continuation, upload file breakpoint continuation, HTTP proxy server pipeline, even it also supports IPV6,SCOKET5 proxy server, upload files via HTTP proxy server
To the FTP server, and so on.
That's why we want to use curl!
Using curl to complete a simple request is mainly divided into the following four steps:
1. Initialize, create a new curl resource
2. Set the URL and the appropriate options
3. Crawl the URL and pass it to the browser
4. Turn off the Curl resource and release the system resources
Let's take a page, usually we use the file_get_contents () function to get:
Like this:
1.<?php2. 3. $str = file_get_contents (' Http://www.shouce.ren '); 4. 5.//or: 6. 7. $str = File ("Http://www.shouce.ren"); 8. 9.//or: 10. 11.readfile ("Http://www.shouce.ren"); 12. 13.?>
In this way we will find that we have no way to handle the error effectively, and more importantly, we have no way to complete some difficult tasks:
such as: processing of cookies, verification, form submission, file upload and so on.
OK, now let's use the code to complete the four steps of curl above:
1.<?php2. 3.//1. Initialize, create a new curl Resource 4. 5. $ch = Curl_init (); 6. 7.//2. Set the URL and the corresponding option 8. 9.curl_setopt ($ch, Curlopt_url, "Http://www.shouce.ren"); 10. 11.curl_setopt ($ch, Curlopt_header, 0); 12. 13.//3. Crawl the URL and pass it to browser 14. 15.curl_exec ($ch); 16. 17.//4. Close the Curl resource and release system Resource 18. 19.curl_close ($ch); 20. 21.?>
In the four steps above, the second step is the most critical and you can set some advanced options:
For example, Curlopt_url and Curlopt_header in the previous example, which represent "URL addresses to get" and "Output header files as data streams when enabled", are just the tip of the iceberg, and we can set a number of options:
Options |
Optional value values |
Note |
Curlopt_autoreferer |
Referer: information is automatically set in the header when based on location : redirection. |
|
Curlopt_binarytransfer |
Returns the native (raw) output when curlopt_returntransfer is enabled. |
|
Curlopt_cookiesession |
When enabled, Curl simply passes a session cookie, ignoring other cookies, and by default, curl returns all cookies to the server. Session cookies are cookies that are used to determine if the session on the server is valid. |
|
Curlopt_crlf |
Converts a Unix newline character to a carriage return line break when enabled. |
|
Curlopt_dns_use_global_cache |
When enabled, a global DNS cache is enabled, which is thread-safe and enabled by default. |
|
Curlopt_failonerror |
The HTTP status code is displayed, and the default behavior is to ignore HTTP messages with numbers less than or equal to 400. |
|
Curlopt_filetime |
When enabled, attempts to modify the information in the remote document. The resulting information is returned through the curlinfo_filetime option of the Curl_getinfo () function. Curl_getinfo (). |
|
Curlopt_followlocation |
When enabled, the "location:" returned by the server server is returned to the server recursively in the header, using curlopt_maxredirs to limit the number of recursive returns. |
|
Curlopt_forbid_reuse |
Forced disconnection after completion of the interaction, cannot be reused. |
|
Curlopt_fresh_connect |
Forces a new connection to be taken in place of the connection in the cache. |
|
Curlopt_ftp_use_eprt |
When enabled, when FTP is downloaded, use the EPRT (or lprt) command. When set to FALSE , disable EPRT and LPRT, using the port command only. |
|
Curlopt_ftp_use_epsv |
When enabled, the EPSV command is first attempted before replying to PASV mode during FTP transfer. When set to FALSE , the EPSV command is disabled. |
|
Curlopt_ftpappend |
Append writes to the file instead of overwriting it when enabled. |
|
Curlopt_ftpascii |
The alias of the Curlopt_transfertext . |
|
Curlopt_ftplistonly |
Only the name of the FTP directory is listed when enabled. |
|
Curlopt_header |
When enabled, the information for the header file is output as a data stream. |
|
Curlinfo_header_out |
The request string to trace the handle when enabled. |
Available starting from PHP 5.1.3. The curlinfo_ prefix is intentional (intentional). |
Curlopt_httpget |
When enabled, the method for HTTP is set to get, because get is the default, so it is used only if it is modified. |
|
Curlopt_httpproxytunnel |
When enabled, it is transmitted over an HTTP proxy. |
|
Curlopt_mute |
Restores the default values for all modified parameters in the Curl function when enabled. |
|
Curlopt_netrc |
After the connection is established, access the ~/.NETRC file to get the user name and password information to connect to the remote site. |
|
Curlopt_nobody |
When enabled, the body portion of the HTML is not output. |
|
Curlopt_noprogress |
Turns off the progress bar of the curl transfer when enabled, and the default setting for this entry is enabled.
Note: PHP automatically sets this option to
TRUE, and this option should only be changed for debugging purposes.
|
|
Curlopt_nosignal |
When enabled, ignores all the signals that curl passes to PHP. This entry is enabled by default when SAPI multi-threaded transmissions. |
When CURL 7.10 is added. |
Curlopt_post |
When enabled, a regular post request is sent with the type:application/x-www-form-urlencoded, just as the form was submitted. |
|
Curlopt_put |
Allow HTTP to send files when enabled, you must set both curlopt_infile and curlopt_infilesize. |
|
Curlopt_returntransfer |
The information obtained by CURL_EXEC () is returned as a file stream, rather than as a direct output. |
|
Curlopt_ssl_verifypeer |
When disabled, curl terminates the validation from the server. Use the curlopt_cainfo option to set the certificate using the curlopt_capath option to set the certificate directory if curlopt_ssl_verifypeer(the default value is 2) is enabled, Curlopt_ssl_verifyhost needs to be set to TRUE otherwise set to FALSE. |
The default is TRUEfrom Curl 7.10. The default binding installation starts with Curl 7.10. |
Curlopt_transfertext |
When enabled, use ASCII mode for FTP transmissions. For LDAP, it retrieves plain text information rather than HTML. On Windows systems, the system does not set STDOUT to binary mode. |
|
Curlopt_unrestricted_auth |
The user name and password information is continuously appended to multiple locations in the header generated by using curlopt_followlocation , even if the domain name has changed. |
|
Curlopt_upload |
Allow file uploads when enabled. |
|
Curlopt_verbose |
When enabled, all information is reported and stored in the STDERR or specified curlopt_stderr . |
|
For the optional parameters of these options below, value should be set to an integer type:
Options |
Optional value values |
Note |
Curlopt_buffersize |
The size of the cache is read in each fetch, but there is no guarantee that the value will be filled every time. |
was added in Curl 7.10. |
Curlopt_closepolicy |
Not curlclosepolicy_least_recently_used is curlclosepolicy_oldest, there are three other Curlclosepolicy_ , but Curl is not supported for the time being. |
|
Curlopt_connecttimeout |
The time to wait before initiating the connection, or infinite wait if set to 0. |
|
Curlopt_connecttimeout_ms |
The time, in milliseconds, to try to connect the wait. If set to 0, the wait is infinite. |
Added in Curl 7.16.2. Available starting from PHP 5.2.3. |
Curlopt_dns_cache_timeout |
Sets the time to save DNS information in memory by default of 120 seconds. |
|
Curlopt_ftpsslauth |
FTP authentication method:Curlftpauth_ssl (first try SSL),curlftpauth_tls (first try TLS) or curlftpauth_default ( Let curl decide automatically). |
Added in Curl 7.12.2. |
Curlopt_http_version |
Curl_http_version_none (default, let CURL decide which version to use),curl_http_version_1_0 (Force http/1.0) or curl_http_version_1_1 (Force use http/1.1 )。 |
|
Curlopt_httpauth |
The HTTP authentication methods used, the optional values are:curlauth_basic,curlauth_digest,curlauth_gssnegotiate,Curlauth _NTLM,curlauth_any and curlauth_anysafe. You can use | The bit field (or) operator separates multiple values, and curl lets the server select one of the best supported values. Curlauth_any equivalent to curlauth_basic | Curlauth_digest | Curlauth_gssnegotiate | CURLAUTH_NTLM. Curlauth_anysafe equivalent to curlauth_digest | Curlauth_gssnegotiate | CURLAUTH_NTLM. |
|
Curlopt_infilesize |
Sets the size limit for the upload file, in bytes (byte). |
|
Curlopt_low_speed_limit |
When the transfer speed is less than curlopt_low_speed_limit (bytes/sec), PHP will determine if it is too slow to cancel the transfer, depending on the curlopt_low_speed_time . |
|
Curlopt_low_speed_time |
When the transfer speed is less than curlopt_low_speed_limit (bytes/sec), PHP will determine if it is too slow to cancel the transfer, depending on the curlopt_low_speed_time . |
|
Curlopt_maxconnects |
The maximum number of connections allowed, which is over Curlopt_closepolicy , determines which connections should be stopped. |
|
Curlopt_maxredirs |
Specify the maximum number of HTTP redirects that are used with curlopt_followlocation . |
|
Curlopt_port |
Used to specify the connection port. (option available) |
|
Curlopt_protocols |
The bit field of the curlproto_* refers to. If enabled, the bit-domain value qualifies libcurl for the protocols that are available for use during transmission. This will allow you to support a number of protocols when compiling libcurl, but the limit is just a subset of what is allowed in them. The default libcurl will use all of the protocols it supports. See Curlopt_redir_protocols. The available protocol options are: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 |
Added in Curl 7.19.4. |
Curlopt_proxyauth |
How HTTP proxy connections are validated. Use the bit field flags in Curlopt_httpauth to set the appropriate options. For proxy authentication only curlauth_basic and CURLAUTH_NTLM are currently supported. |
Added in Curl 7.10.7. |
Curlopt_proxyport |
The port of the proxy server. The port can also be set in curlopt_proxy . |
|
Curlopt_proxytype |
Not curlproxy_http (the default) is curlproxy_socks5. |
was added in Curl 7.10. |
Curlopt_redir_protocols |
The bit field value in the curlproto_* . If enabled, the bit-domain value restricts the protocol that the transport thread can use when curlopt_followlocation is turned on to follow a redirect. This will enable you to restrict the transport thread to use a subset of the allowed protocols when redirecting the default Libcurl will allow all protocols except file and SCP. This and 7.19.4 pre-release versions are unconditionally followed by a number of different supported protocols. For agreement constants, refer to curlopt_protocols. |
Added in Curl 7.19.4. |
Curlopt_resume_from |
Passes a byte offset (used to continue the breakpoint) when the transfer is resumed. |
|
Curlopt_ssl_verifyhost |
1 Check that there is a common name (common name) in the server SSL certificate. Note: The common name (Common name) is generally filled in with the domain name (domain) or subdomain (sub domain) where you will be applying for an SSL certificate. 2 checks if the common name exists and matches the host name provided. |
|
Curlopt_sslversion |
The SSL version used (2 or 3). By default, PHP detects this value by itself, although in some cases it needs to be set manually. |
|
Curlopt_timecondition |
If edited after a time specified by curlopt_timevalue , the page is returned using curl_timecond_ifmodsince , if it has not been modified, and Curlopt_ Header is true, returns a header for "304 not Modified" , Curlopt_header to False, using Curl_timecond_ Ifunmodsince, the default value is curl_timecond_ifunmodsince. |
|
Curlopt_timeout |
Sets the maximum number of seconds that curl is allowed to execute. |
|
Curlopt_timeout_ms |
Sets the maximum number of milliseconds that curl allows to execute. |
Added in Curl 7.16.2. can be used from PHP 5.2.3. |
Curlopt_timevalue |
Sets the timestamp used by a curlopt_timecondition , using curl_timecond_ifmodsincein the default state. |
|
For the optional parameters of these options below, value should be set to a string type:
Options |
Optional value values |
Note |
Curlopt_cainfo |
A file name that holds 1 or more certificates used to authenticate the server. This parameter is only meaningful when used with Curlopt_ssl_verifypeer . |
|
Curlopt_capath |
A directory that holds multiple CA certificates. This option is used in conjunction with Curlopt_ssl_verifypeer . |
|
Curlopt_cookie |
Set the contents of the "Cookie:" section of the HTTP request. Multiple cookies are separated by semicolons, with a semicolon followed by a space (for example, "fruit=apple; Colour=red"). |
|
Curlopt_cookiefile |
The file name that contains the cookie data, the format of the cookie file can be in Netscape format, or just plain HTTP header information is stored in the file. |
|
Curlopt_cookiejar |
The file where the cookie information is saved after the connection ends. |
|
Curlopt_customrequest |
Use a custom request message instead of "GET" or "HEAD" as an HTTP request. This is for executing "DELETE" or other more covert HTTP requests. Valid values such as "GET","POST","CONNECT" and so on. In other words, do not enter the entire HTTP request here. For example, entering "get/index.html http/1.0" is incorrect.
Note: Do not use before you determine the method that the server supports for this custom request.
|
|
Curlopt_egdsocket |
Similar to Curlopt_random_file, except for a entropy gathering daemon socket. |
|
Curlopt_encoding |
The value of "accept-encoding:" in the HTTP request header. The supported encodings are "identity","deflate" and "gzip". If an empty string "", the request header sends all supported encoding types. |
was added in Curl 7.10. |
Curlopt_ftpport |
This value will be used to obtain the IP address required for the FTP "POST" instruction. The "POST" command tells the remote server to connect to the IP address we specify. This string can be a plain text IP address, host name, a network interface name (under Unix), or just a '-' to use the default IP address. |
|
Curlopt_interface |
The network send interface name, which can be an interface name, an IP address, or a host name. |
|
Curlopt_krb4level |
KRB4 (Kerberos 4) security level. Any of the following values are valid (from low to high):"Clear","safe","Confidential","private". If the string does not match these, "private"will be used. When this option is set to NULL , KRB4 security authentication is disabled. Currently KRB4 security authentication can only be used for FTP transmission. |
|
Curlopt_postfields |
All data is sent using the "POST" action in the HTTP protocol. To send a file, precede the file name with the @ prefix and use the full path. This parameter can be passed urlencoded after the string resembles 'Para1=val1¶2=val2& Or use a field name as the key value, the field data is an array of values. If value is an array, thecontent-type header will be set to multipart/form-data. |
|
Curlopt_proxy |
HTTP proxy channel. |
|
Curlopt_proxyuserpwd |
A string that is used to connect to the agent's "[Username]:[password]" format. |
|
Curlopt_random_file |
A file name that is used to generate an SSL random number seed. |
|
Curlopt_range |
In the "X- y" form, where X and Y are options to get the range of data, in bytes. The HTTP transport thread also supports several such duplicates separated by commas such as "X-y,n-m". |
|
Curlopt_referer |
The contents of "Referer:" in the HTTP request header. |
|
Curlopt_ssl_cipher_list |
A list of SSL encryption algorithms. For example, Rc4-sha and TLSv1 are available encrypted lists. |
|
Curlopt_sslcert |
A file name that contains the PEM format certificate. |
|
curlopt_sslcertpasswd |
The password required to use the curlopt_sslcert certificate. |
|
Curlopt_sslcerttype |
The type of certificate. The supported formats are "PEM" (the default), "DER" and "ENG". |
Added in Curl 7.9.3. |
Curlopt_sslengine |
The cryptographic engine variable used to specify the SSL private key in Curlopt_sslkey . |
|
Curlopt_sslengine_default |
A variable used for asymmetric cryptographic operations. |
|
Curlopt_sslkey |
The file name that contains the SSL private key. |
|
curlopt_sslkeypasswd |
The password for the SSL private key specified in Curlopt_sslkey .
Note: Since this option contains sensitive password information, remember to keep this PHP script secure.
|
|
Curlopt_sslkeytype |
The encryption type of the private key specified in Curlopt_sslkey , supported by the key type "PEM"(the default),"DER" and "ENG". |
|
Curlopt_url |
The URL address you need to get, or you can set it in the Curl_init () function. |
|
Curlopt_useragent |
A string containing a "user-agent:" header in the HTTP request. |
|
Curlopt_userpwd |
Pass in a connection the user name and password required in the format:"[Username]:[password]". |
|
For the following optional parameters of option ,value should be set to an array:
For the following optional parameters of option ,value should be set to a stream resource (for example, using fopen ()):
For the following optional parameters of option ,value should be set to a callback function name:
options |
Optional value values |
curlopt_headerfunction |
Set a callback function that has two parameters, the first of which is a CU The resource handle of the RL, and the second is the header data for the output. The output of the header data must rely on this function to return the size of the data that has been written. |
curlopt_passwdfunction |
set a callback function with three parameters, the first being a resource handle for curl, and the second a password prompt, Three parameters are the maximum allowable value for the password length. Returns the value of the password. |
curlopt_progressfunction |
set a callback function with three parameters, first a resource handle for curl, and the second a file descriptor Resource, and the third is the length. Returns the contained data. |
curlopt_readfunction |
has two parameters for a callback function, the first is a session handle, and the second is a string of HTTP response header information. With this function, the returned data is processed on its own. The return value is the data size, in bytes. Returns 0 for the EOF signal. |
curlopt_writefunction |
has two parameters for a callback function, the first is a session handle, and the second is a string of HTTP response header information. With this callback function, the response header information is processed on its own. The response header information is the entire string. Sets the return value to the exact length of the written string. The transport thread terminates when an error occurs. |
See, as long as the second function within the set of these options to complete the corresponding function, curl function is often powerful drop, you can try Oh!
For example, we just want to input the acquired content into a file, instead of outputting it directly to the browser, we can use the Curlopt_returntransfer option!
In this way, when Curl executes, it will output the contents of the page to the file, we can complete the collection and other functions!
In terms of efficiency, curl's principle is to simulate the operation of the browser, it is more efficient than file_get_contents () four times times higher than, imagine that we
To collect a very large amount of information on the station, operating efficiency of the difference imaginable!
Not only in terms of efficiency, but also in stability, curl is much better than the file_get_contents () function.
This is the powerful curl, the following will give you a detailed description of its advanced applications, we can simulate the browser post value, or even upload!
A detailed tutorial on PHP curl