Heim >Backend-Entwicklung >PHP-Tutorial >Anwendung von CURL und PHP-CLI [CURL]

Anwendung von CURL und PHP-CLI [CURL]

PHP中文网
PHP中文网Original
2016-08-08 09:24:231430Durchsuche

Curl ist ein äußerst leistungsfähiges HTTP-Übertragungstool, das das Hoch- und Herunterladen von Dateien unterstützt.

Verwendung von Curl in der Befehlszeile

Befehlsparameter
-a/--append 上传文件时,附加到目标文件
-A/--user-agent设置用户代理发送给服务器
- anyauth   可以使用“任何”身份验证方法
-b/--cookiecookie字符串或文件读取位置
- basic 使用HTTP基本验证
-B/--use-ascii 使用ASCII /文本传输
-c/--cookie-jar操作结束后把cookie写入到这个文件中
-C/--continue-at断点续转
-d/--dataHTTP POST方式传送数据
--data-ascii以ascii的方式post数据
--data-binary以二进制的方式post数据
--negotiate     使用HTTP身份验证
--digest        使用数字身份验证
--disable-eprt  禁止使用EPRT或LPRT
--disable-epsv  禁止使用EPSV
-D/--dump-header把header信息写入到该文件中
--egd-file为随机数据(SSL)设置EGD socket路径
--tcp-nodelay   使用TCP_NODELAY选项
-e/--referer 来源网址
-E/--cert客户端证书文件和密码 (SSL)
--cert-type证书文件类型 (DER/PEM/ENG) (SSL)
--key私钥文件名 (SSL)
--key-type私钥文件类型 (DER/PEM/ENG) (SSL)
--pass私钥密码 (SSL)
--engine加密引擎使用 (SSL). "--engine list" for list
--cacertCA证书 (SSL)
--capathCA目录 (made using c_rehash) to verify peer against (SSL)
--ciphersSSL密码
--compressed    要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout设置最大请求时间
--create-dirs   建立本地目录的目录层次结构
--crlf          上传是把LF转变成CRLF
-f/--fail          连接失败时不显示http错误
--ftp-create-dirs 如果远程目录不存在,创建远程目录
--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
--ftp-pasv      使用 PASV/EPSV 代替端口
--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址
--ftp-ssl       尝试用 SSL/TLS 来进行ftp数据传输
--ftp-ssl-reqd  要求用 SSL/TLS 来进行ftp数据传输
-F/--form模拟http表单提交数据
-form-string模拟http表单提交数据
-g/--globoff 禁用网址序列和范围使用{}和[]
-G/--get 以get的方式来发送数据
-h/--help 帮助
-H/--header自定义头信息传递给服务器
--ignore-content-length  忽略的HTTP头信息的长度
-i/--include 输出时包括protocol头信息
-I/--head  只显示文档信息
从文件中读取-j/--junk-session-cookies忽略会话Cookie
- 界面指定网络接口/地址使用
- krb4 启用与指定的安全级别krb4
-j/--junk-session-cookies 读取文件进忽略session cookie
--interface使用指定网络接口/地址
--krb4使用指定安全级别的krb4
-k/--insecure 允许不使用证书到SSL站点
-K/--config  指定的配置文件读取
-l/--list-only 列出ftp目录下的文件名称
--limit-rate设置传输速度
--local-port强制使用本地端口号
-m/--max-time设置最大传输时间
--max-redirs设置最大读取的目录数
--max-filesize设置最大下载的文件总量
-M/--manual  显示全手动
-n/--netrc 从netrc文件中读取用户名和密码
--netrc-optional 使用 .netrc 或者 URL来覆盖-n
--ntlm          使用 HTTP NTLM 身份验证
-N/--no-buffer 禁用缓冲输出
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
-p/--proxytunnel   使用HTTP代理
--proxy-anyauth 选择任一代理身份验证方法
--proxy-basic   在代理上使用基本身份验证
--proxy-digest  在代理上使用数字身份验证
--proxy-ntlm    在代理上使用ntlm身份验证
-P/--ftp-port使用端口地址,而不是使用PASV
-Q/--quote文件传输前,发送命令到服务器
-r/--range检索来自HTTP/1.1或FTP服务器字节范围
--range-file 读取(SSL)的随机文件
-R/--remote-time   在本地生成文件时,保留远程文件时间
--retry传输出现问题时,重试的次数
--retry-delay传输出现问题时,设置重试间隔时间
--retry-max-time传输出现问题时,设置最大重试时间
-s/--silent静音模式。不输出任何东西
-S/--show-error   显示错误
--socks4用socks4代理给定主机和端口
--socks5用socks5代理给定主机和端口
--stderr-t/--telnet-optionTelnet选项设置
--trace对指定文件进行debug
--trace-asciiLike --跟踪但没有hex输出
--trace-time    跟踪/详细输出时,添加时间戳
-T/--upload-file上传文件
--urlSpet URL to work with
-u/--user设置服务器的用户和密码
-U/--proxy-user设置代理用户名和密码
-v/--verbose
-V/--version 显示版本信息
-w/--write-out [format]什么输出完成后
-x/--proxy在给定的端口上使用HTTP代理
-X/--request指定什么命令
-y/--speed-time 放弃限速所要的时间。默认为30
-Y/--speed-limit 停止传输速度的限制,速度时间'秒'
-z/--time-cond  传送时间设置
-0/--http1.0  使用HTTP 1.0
-1/--tlsv1  使用TLSv1(SSL)
-2/--sslv2 使用SSLv2的(SSL)
-3/--sslv3         使用的SSLv3(SSL)
--3p-quote      like -Q for the source URL for 3rd party transfer
--3p-url        使用url,进行第三方传送
--3p-user       使用用户名和密码,进行第三方传送
-4/--ipv4   使用IP4
-6/--ipv6   使用IP6
-#/--progress-bar 用进度条显示当前的传送状态
Beispiel

Den Seiteninhalt in einer Datei abfangen

curl -o home.html  http://www.pinlehuo.com 
$ -o/--output 把输出写到该文件中

# 或者 ↓↓

$ curl http://www.linuxidc.com > page.html

Um eine bestimmte Datei abzurufen, verwenden Sie -O (Großschreibung), und die folgende URL sollte spezifisch für eine bestimmte Datei sein Datei, sonst kann ich sie nicht erfassen. Wir können auch reguläre Ausdrücke verwenden, um Dinge zu erfassen, aber der Dateiname muss dennoch spezifisch sein

$ curl -O www.pinlehuo.com/d/file/admin/2015/05/5551bf06428ec.jpg

$ curl -O http://www.codesky.net/wp-content/uploads/2010/[0-9][0-9]/aaaaa.jpg

Formularinformationen simulieren, Anmeldung simulieren, Cookie-Informationen speichern

# -D/--dump-header把header信息写入到该文件中
$ curl -c ./cookie_c.txt -F log=aaaa -F pwd=****** http://www.codesky.net/wp-login.php (没试过~)

Antwortheaderinformationen anzeigen

curl -I http://www.sunrisecorp.net/

Formularinformationen simulieren, Anmeldung simulieren, Header-Informationen speichern

curl -D ./cookie_D.txt -F log=aaaa -F pwd=****** http://www.codesky.net/wp-login.php
# -c(小写)产生的cookie和-D里面的cookie是不一样的。

Cookie-Dateien verwenden

curl -b ./cookie_c.txt  http://www.codesky.net/wp-admin

Haltepunkt fortsetzen, -C (Großbuchstaben)

curl -C -O http://www.codesky.net/wp-content/uploads/2010/09/compare_varnish.jpg

Um Daten zu übertragen, verwenden Sie am besten die Anmeldeseite zum Testen, denn nachdem Sie den Wert übergeben haben, ruft Curl die Daten ab und Sie können sehen, ob der übergebene Wert erfolgreich ist

curl -d log=aaaa  http://www.codesky.net/wp-login.php

Gefälschte Quelladresse, einige Websites ermitteln die Quelladresse der Anfrage

curl -e http://localhost http://www.codesky.net/wp-login.php

Wenn wir Curl häufig verwenden, um an die Dinge anderer Leute zu gelangen, blockieren die Leute Ihre IP. Zu diesem Zeitpunkt können wir sie verwenden Proxy

curl -x 24.10.28.84:32779 -o home.html http://www.codesky.net

Für größere Dinge können wir sie in Teilen herunterladen

[root@krlcgcms01 mytest]# curl -r 0-100 -o img.part1 http://www.codesky.net/wp-
content/uploads/2010/09/compare_varnish.jpg
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
 Dload  Upload   Total   Spent    Left  Speed
100   101  100   101    0     0    105      0 --:--:-- --:--:-- --:--:--     0
[root@krlcgcms01 mytest]# curl -r 100-200 -o img.part2 http://www.codesky.net/wp-
content/uploads/2010/09/compare_varnish.jpg
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
 Dload  Upload   Total   Spent    Left  Speed
100   101  100   101    0     0     57      0  0:00:01  0:00:01 --:--:--     0
[root@krlcgcms01 mytest]# curl -r 200- -o img.part3 http://www.codesky.net/wp-
content/uploads/2010/09/compare_varnish.jpg
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
 Dload  Upload   Total   Spent    Left  Speed
100  104k  100  104k    0     0  52793      0  0:00:02  0:00:02 --:--:-- 88961
[root@krlcgcms01 mytest]# ls |grep part | xargs du -sh
4.0K    one.part1
112K    three.part3
4.0K    two.part2
用的时候,把他们cat一下就OK了,cat img.part* >img.jpg

Informationen zum Download-Fortschritt anzeigen

[root@krlcgcms01 mytest]# curl -# -O  http://www.codesky.net/wp-content/uploads/2010/09/compare_varnish.jpg
######################################################################## 100.0%

Dateien über FTP herunterladen

[zhangy@BlackGhost ~]$ curl -u 用户名:密码 -O http://www.codesky.net/demo/curtain/bbstudy_files/style.css
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
 Dload  Upload   Total   Spent    Left  Speed
101  1934  101  1934    0     0   3184      0 --:--:-- --:--:-- --:--:--  7136
或者用下面的方式
[zhangy@BlackGhost ~]$ curl -O ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/style.css

Über FTP hochladen

[zhangy@BlackGhost ~]$ curl -T test.sql ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/

Verwendung von Curl in PHP-Skripten

cURL-Bibliothek installieren

WAMP-Umgebung
Öffnen Sie jeweils die folgenden 2 Dateien:
wampbinphp(Ihre PHP-Version)php.ini
wampbinApache(Ihre Apache-Version)binphp.ini
Suchen Sie nach extension=php_curl.dll und löschen Sie dann die vorherigen Symbole;
Starten Sie WAMP neu.
// ↑ ↑ Befolgen Sie zuerst die oben genannten Vorgänge. Wenn dies nicht funktioniert, lesen Sie die folgenden beiden Schritte.
Hinweis: Wenn es sich um ein 64-Bit-System handelt, müssen Sie auch http:// besuchen www.anindya.com/, um das komprimierte 64-Bit-PHP-Paket der entsprechenden Version herunterzuladen. Nach der Dekomprimierung überschreiben Sie die Datei php_curl.dll im ext-Verzeichnis mit der Datei php_curl.dll im ext-Verzeichnis von Wamp. PHP entsprechende Version wampbinphpphp5.4.12, und starten Sie dann WAMP neu.
Referenzwebsite: http://blog.net/ewili/article/details/9008493

window
1.php.ini. Entfernen Sie das Semikolon vor der Erweiterung= php_curl.dll;
2.php_curl.dll,libeay32.dll , ssleay32.dll wird nach %windir%/system32 kopiert

linux
Wenn PHP im System kompiliert wurde, sind neue Erweiterungen erforderlich später hinzugefügt werden. Eine Möglichkeit besteht darin, PHP vollständig neu zu kompilieren, die andere darin, die Erweiterungsbibliothek separat zu kompilieren und in Form einer Erweiterung zu erweitern. Das Folgende ist ein Beispiel für die Installation der Curl-Erweiterung:
./configure
make
php erfordert, dass das Curl-Verzeichnis Include- und Lib-Verzeichnisse enthält und es müssen zwei Dateien easy.h und curl.h vorhanden sein unter include, lib Darunter muss sich libcurl.a befinden. Nach der Kompilierung sind die Dateien im Include vorhanden, jedoch nicht im lib-Verzeichnis. Es wurde ursprünglich im Verzeichnis lib/.libs generiert, also kopieren Sie es in das Verzeichnis lib

2. Geben Sie das Quellcodeverzeichnis ein, in dem das ursprüngliche PHP installiert wurde,
cd ext
cd curl
phpize
. /configure --with-curl=DIR
make
generiert die Datei „curl.so“ unter PHPDIR/ext/curl/moudles/.

CURL-Funktionsbibliothek in PHP
curl_close — 关闭一个curl会话
curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数
curl_errno — 返回一个包含当前会话错误信息的数字编号
curl_error — 返回一个包含当前会话错误信息的字符串
curl_exec — 执行一个curl会话
curl_getinfo — 获取一个curl连接资源句柄的信息
curl_init — 初始化一个curl会话
curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close — 关闭一个批处理句柄资源
curl_multi_exec — 解析一个curl批处理句柄
curl_multi_getcontent — 返回获取的输出的文本流
curl_multi_info_read — 获取当前解析的curl的相关传输信息
curl_multi_init — 初始化一个curl批处理句柄资源
curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select — Get all the sockets associated with the cURL extension, which can then be "selected"
curl_setopt_array — 以数组的形式为一个curl设置会话参数
curl_setopt — 为一个curl设置会话参数
参考网址:http://blog.csdn.net/superbirds/article/details/7532277: curl_setopt 会话参数详解
参考网址:http://www.zhibotie.net/space-1-do-blog-id-71.html

curl_version — 获取curl相关的版本信息
curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。
curl_exec()函数的作用是执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。
curl_close()函数的作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。

Beispiel für eine normale Crawling-Webseite

// 1. 初始化
$ch = curl_init();
//$ch = curl_init("http://www.baidu.com/");

// 2. 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");//CURLOPT_URL: 这是你想用PHP取回的URL地址。
你也可以在用curl_init()函数初始化时设置这个选项

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设定是否输出页面内容,这里为0的话,后面就不用echo,
就直接把curl抓回来的内容输出;
curl_setopt($ch, CURLOPT_HEADER, 0);//设定是否显示头信息,为1的时候,就会把响应头信息也给一并输出

// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
//echo $output;//输出抓回来的网页;如果curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0),就不需要此句;

// 4. 释放curl句柄
curl_close($ch);

Beurteilen Sie den Fehler anhand des Crawlings, geben Sie den Fehler aus und erhalten Sie gecrawlte Informationen über die letzte Seite

// 1. 初始化
$ch = curl_init();
//$ch = curl_init("http://www.baidu.com/");

// 2. 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");//CURLOPT_URL: 这是你想用PHP取回的URL地址。
你也可以在用curl_init()函数初始化时设置这个选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设定是否输出页面内容,这里为0的话,后面就不用echo,
就直接把curl抓回来的内容输出;
curl_setopt($ch, CURLOPT_HEADER, 0);//设定是否显示头信息,为1的时候,就会把响应头信息也给一并输出

// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
//echo $output;//输出抓回来的网页;如果curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0),就不需要此句;

#判断错误并输出错误
if($output === false){ //全等,不能==; 是为了和获取为空字符串分开;
   echo "cUrl Error:" . curl_error($h); //如果获取失败的话,就输出失败原因;但是在有时候却被工信部重定向到114查询;
}

#得到抓取过来的页面的信息
//$info = curl_getinfo($ch);
//print_r($info);//包含了抓取过来的页面的信息
/*
  “url” //资源网络地址
  “content_type” //内容编码
  “http_code” //HTTP状态码
  “header_size” //header的大小
  “request_size” //请求的大小
  “filetime” //文件创建时间
  “ssl_verify_result” //SSL验证结果
  “redirect_count” //跳转技术  
  “total_time” //总耗时
  “namelookup_time” //DNS查询耗时
  “connect_time” //等待连接耗时
  “pretransfer_time” //传输前准备耗时
  “size_upload” //上传数据的大小
  “size_download” //下载数据的大小
  “speed_download” //下载速度
  “speed_upload” //上传速度
  “download_content_length”//下载内容的长度
  “upload_content_length” //上传内容的长度  
  “starttransfer_time” //开始传输的时间
  “redirect_time”//重定向耗时
*/
//echo '获取'. $info['url'] . '耗时'. $info['total_time'] . '秒';



// 4. 释放curl句柄
curl_close($ch);

                                                                                                                                                                                           Net (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn