0x1881 / curl
Curl 类
README
此包可以使用 Curl 向指定站点发送 HTTP 请求。
它提供了可以接受多种类型参数的函数,以配置一个将要由该类发送到 HTTP api 的 HTTP 请求。
设置所有参数后,该类可以执行配置的 HTTP 请求的发送。
编写用于教学目的。用户对滥用负责。
安装
composer require 0x1881/curl
使用
<?php require_once __DIR__.'/vendor/autoload.php'; $curl = new \C4N\Curl; $curl->get('https://httpbin.org/get') ->setDebug(true) ->setHeader('User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)') ->setUserAgent('Googlebot/2.1 (+http://www.google.com/bot.html)') ->setCookieFile('./cookie.txt') ->setCookieJar('./cookie.txt') ->setReferer('https://httpbin.org/') ->setAutoReferer(true) ->setTimeout(5) ->setProxy('127.0.0.1:8888') ->setProxyAuth('user:pass') ->exec(); echo $curl->getResponse(); echo $curl->getHttpCode(); echo $curl->getHeader('Location'); echo $curl->getCookie('laravel_session');
方法
请求方法
- setDefault
- setMethod
- setUrl
- setHeader
- setBody
- setOpt
- setDebug
- setUserAgent
- setCookie
- setCookieFile
- setCookieJar
- setFollow
- setReturn
- setReferer
- setAutoReferer
- setTimeout
- setConnectTimeout
- setMaxConnect
- setMaxRedirect
- setProxy
- setProxyType
- setProxyAuth
- send
- get
- post
- put
- put
- delete
- patch
- head
- connect
- options
- trace
- exec
响应方法
- getInfo
- getCurlError
- getResponse
- getRespJson
- getEffective
- getHttpCode
- getHeader
- getHeaders
- getCookie
- getCookiesRaw
- getCookiesArray
- getBetween
- getBetweens
其他方法
常量
方法详细描述
请求方法详情
setDefault()
将类返回到默认请求设置。在每次请求中都将设置重置为默认值。
$curl->setDefault();
setMethod()
用于指定请求类型。
接受的类型
GET
,POST
,PUT
,DELETE
,PATCH
,HEAD
,CONNECT
,OPTIONS
,TRACE
$curl->setMethod('GET');
setUrl()
指定请求的目的地。
$curl->setUrl('https://httpbin.org/get');
setHeader()
向请求添加标题。
$curl->setHeader('Test-Header: value');
或
$curl->setHeader('Test-Header', 'value');
或
$headers = [ 'Test-Header: value', 'Test-Header2: value' ]; $curl->setHeader($headers);
setBody()
向请求添加正文。适用于某些请求方法。
原始:将指定的正文设置为请求的直接纯文本。
$curl->setBody('name=Mehmet&lastname=Can');
查询 1:设置内容类型为 x-www-form-urlencoded
的正文。添加为示例注释。如果数据是数组类型,则该方法将将其转换为指定的格式。
$body = [ 'name' => 'Mehmet', 'lastname' => 'Can' ]; $curl->setBody($body); // name=Mehmet&lastname=Can
查询 2:设置内容类型为 x-www-form-urlencoded
的正文。添加为示例注释。
$body = [ 'name' => 'Mehmet', 'lastname' => 'Can' ]; $curl->setBody($body, $curl::QUERY); // name=Mehmet&lastname=Can
JSON:设置 json
格式的正文。添加为示例注释。
$body = [ 'name' => 'Mehmet', 'lastname' => 'Can' ]; $curl->setBody($body, $curl::JSON); // {"name":"Mehmet","lastname":"Can"}
setOpt()
这是使 curl 库中的 curl_setopt
方法实用的方法。可选地可以使用 CURLOPT 常量。
$curl->setOpt(CURLOPT_URL, 'https://httpbin.org/get');
setDebug()
它将 curl 库中的 CURLOPT_VERBOSE 常量设置为 true,因此它在终端行返回可选的调试数据。默认值 false
是关闭的。
$curl->setDebug(true);
setUserAgent()
设置请求的 User-Agent
标题。
$curl->setUserAgent('Googlebot/2.1 (+http://www.google.com/bot.html)');
setCookie()
将指定的 cookie 信息添加到请求的 Cookie
标题中。
$cookies = "XSRF-TOKEN=OWY4NmQwODE4ODRMjJjZDE1ZDZMGYwMGEwOA==; ci_session=esa2tb3mviicp2cb5abz32g"; $curl->setCookie($cookies);
或
$cookie_name = 'XSRF-TOKEN'; $cookie_value = 'OWY4NmQwODE4ODRMjJjZDE1ZDZMGYwMGEwOA=='; $curl->setCookie($cookie_name, $cookie_value);
或
$cookies = [ 'XSRF-TOKEN' => 'OWY4NmQwODE4ODRMjJjZDE1ZDZMGYwMGEwOA==', 'ci_session' => 'esa2tb3mviicp2cb5abz32g' ]; $curl->setCookie($cookies);
setCookieFile()
它从包含 Netscape 格式的 cookie 信息的文件中获取 cookie 数据,并将其适应到请求中。
$curl->setCookieFile(__DIR__.DIRECTORY_SEPARATOR.'cookies.txt');
setCookieJar()
它将 Netscape 格式的 cookie 信息添加并保存到指定的文件中。
$curl->setCookieJar(__DIR__.DIRECTORY_SEPARATOR.'cookies.txt');
setFollow()
用于允许在请求重定向时使用。默认值false
表示关闭。
$curl->setFollow(true);
setReturn()
允许请求传输的输出与否。默认值false
表示关闭。
$curl->setReturn(true);
setReferer()
设置请求中使用的Referer
头部。
$curl->setReferer('https://httpbin.org/');
setAutoReferer()
如果请求已重定向,它将自动设置请求中使用的Referer
头部。默认值false
表示关闭。
$curl->setAutoReferer(true);
setTimeout()
设置curl函数的超时时间(秒)。
$curl->setTimeout(5);
setConnectTimeout()
设置请求尝试时间(秒)。
$curl->setConnectTimeout(5);
setMaxConnect()
设置最大并发连接数。
$curl->setMaxConnect(5);
setMaxRedirect()
设置最大重定向次数。默认值为20
。
$curl->setMaxRedirect(5);
setProxy()
允许通过代理连接请求。它可以自动解析。当自动解析时,应仅使用第一个参数。它使用默认的HTTPS
代理类型。
$curl->setProxy('127.0.0.1', '8080');
veya (oto ayrıştılır)
$curl->setProxy('127.0.0.1:8080');
或指定代理类型。(自动解析)
$curl->setProxy('http://127.0.0.1:8080'); $curl->setProxy('https://127.0.0.1:8080'); $curl->setProxy('socks4://127.0.0.1:8080'); $curl->setProxy('socks5://127.0.0.1:8080');
或使用用户名和密码进行身份验证。(自动解析)
$curl->setProxy('username:password@127.0.0.1:8080'); $curl->setProxy('http://username:password@127.0.0.1:8080'); $curl->setProxy('https://username:password@127.0.0.1:8080'); $curl->setProxy('socks4://username:password@127.0.0.1:8080'); $curl->setProxy('socks5://username:password@127.0.0.1:8080');
setProxyType()
在允许请求通过代理连接时确定代理类型。必须使用curl常量。
$curl->setProxyType(CURLPROXY_HTTPS);
setProxyAuth()
在允许请求通过代理连接时设置代理身份验证信息。
$curl->setProxyAuth('user:pass');
或
$curl->setProxyAuth('user', 'pass');
或
$curl->setProxyAuth('user');
send()
这是执行请求的函数。它用于实现请求方法。类中的所有请求方法都使用此方法发送请求。
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $curl->send('GET', 'https://httpbin.org/get', $headers);
或
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $body = [ 'name' => 'Mehmet', 'lastname' => 'Can' ]; $curl->send('POST', 'https://httpbin.org/get', $headers, $body, $curl::JSON);
get()
使用GET
请求方法发送请求。此请求不接受请求体。
$curl->get('https://httpbin.org/get');
veya
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $curl->get('https://httpbin.org/get', $headers);
veya
$headers = 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html'; $curl->get('https://httpbin.org/get', $headers);
post()
使用POST
请求方法发送请求。此请求接受请求体。对于所有可以发送体的请求方法,setBody方法都是有效的。
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $body = [ 'name' => 'Mehmet', 'lastname' => 'Can' ]; $curl->post('https://httpbin.org/post', $headers, $body); $curl->post('https://httpbin.org/post', $headers, $body, $curl::JSON);
put()
使用PUT
请求方法发送请求。此请求接受请求体。对于所有可以发送体的请求方法,setBody方法都是有效的。
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $body = [ 'name' => 'Mehmet', 'lastname' => 'Can' ]; $curl->put('https://httpbin.org/put', $headers, $body); $curl->put('https://httpbin.org/put', $headers, $body, $curl::JSON);
put()
It sends a request using the PUT
request method. This request accepts the request body. The setBody method is valid for all request methods that can be sent body.
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $body = [ 'name' => 'Mehmet', 'lastname' => 'Can' ]; $curl->put('https://httpbin.org/put', $headers, $body); $curl->put('https://httpbin.org/put', $headers, $body, $curl::JSON);
delete()
使用DELETE
请求方法发送请求。此请求接受请求体。对于所有可以发送体的请求方法,setBody方法都是有效的。
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $body = [ 'name' => 'Mehmet', 'lastname' => 'Can' ]; $curl->delete('https://httpbin.org/delete', $headers, $body); $curl->delete('https://httpbin.org/delete', $headers, $body, $curl::JSON);
patch()
使用PATCH
请求方法发送请求。此请求接受请求体。对于所有可以发送体的请求方法,setBody方法都是有效的。
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $body = [ 'name' => 'Mehmet', 'lastname' => 'Can' ]; $curl->patch('https://httpbin.org/patch', $headers, $body); $curl->patch('https://httpbin.org/patch', $headers, $body, $curl::JSON);
head()
使用HEAD
请求方法发送请求。此请求不接受体,也不返回响应。
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $curl->head('https://httpbin.org/head', $headers);
connect()
使用CONNECT
请求方法发送请求。此请求不接受请求体。
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $curl->connect('https://httpbin.org/connect', $headers);
options()
使用OPTIONS
请求方法发送请求。此请求不接受请求体。
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $curl->options('https://httpbin.org/options', $headers);
trace()
使用TRACE
请求方法发送请求。此请求不接受体,也不返回响应。
$headers = [ 'User-agent: Googlebot/2.1 (+http://www.google.com/bot.html)' ]; $curl->trace('https://httpbin.org/options', $headers);
exec()
在设置任何请求后运行此方法是强制性的。除非将exec方法追加到请求的末尾,否则请求不会发送。此类与curl库中的逻辑一起工作。必要性的原因是为了在不发送请求的情况下更容易地检查设置。
$curl->exec();
for setting check, print $curl variable with print_r method without adding exec.
响应方法细节
getInfo()
这是一个返回curl请求发送后发生的详细信息的函数。
所有信息都可以直接以数组类型返回。
$curl->getInfo(); /* Array ( [url] => https://httpbin.org/get [content_type] => application/json [http_code] => 200 [header_size] => 202 [request_size] => 51 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.725079 [namelookup_time] => 0.126243 [connect_time] => 0.271622 [pretransfer_time] => 0.577915 [size_upload] => 0 [size_download] => 221 [speed_download] => 304 [speed_upload] => 0 [download_content_length] => 221 [upload_content_length] => -1 [starttransfer_time] => 0.724962 [redirect_time] => 0 [redirect_url] => [primary_ip] => 127.0.0.1 [certinfo] => Array ( ) [primary_port] => 80 [local_ip] => 127.0.0.1 [local_port] => 22219 [http_version] => 3 [protocol] => 2 [ssl_verifyresult] => 0 [scheme] => HTTPS [appconnect_time_us] => 577763 [connect_time_us] => 271622 [namelookup_time_us] => 126243 [pretransfer_time_us] => 577915 [redirect_time_us] => 0 [starttransfer_time_us] => 724962 [total_time_us] => 725079 ) */
或者也可以返回单个信息。
$curl->getInfo('http_code');
getCurlError()
如果在发送请求后发生基于curl的错误,此方法将返回错误。
$curl->getCurlError();
getResponse()
返回请求的响应。
$curl->getResponse();
或者你可以通过删除答案中的额外空格来返回它。
$curl->getResponse(true);
getRespJson()
如果请求接收到的响应是json格式,则通过解析它返回json数据。返回类型是对象。也可以设置数组类型。
$curl->getRespJson();
或以数组形式返回json数据。
$curl->getRespJson(true);
可以为json_decode
的第二个参数设置标志。
$curl->getRespJson(false, JSON_PRETTY_PRINT);
getEffective()
如果请求有重定向,则返回最后访问的源。为此,必须将setReturn方法设置为true。
$curl->getEffective(); // https://httpbin.org/get
getHttpCode()
返回请求的http状态码。
$curl->getHttpCode(); // 200
getHeader()
返回请求返回的任何头信息。返回单个值。头信息id添加到第二个参数。头信息id参数返回默认最后请求的头信息数据。
$curl->getHeader('device_id'); // e324h4e708f097febb40384a51as48
或如果有重定向,也可以从之前的请求中获取头信息。头信息id输入到第二个参数。
$curl->getHeader('device_id', 0); // e324h4e708f097febb40384a51as48
getHeaders()
返回请求返回的所有头信息。数组返回值。头信息id添加到第一个参数。头信息id参数返回默认最后请求的头信息数据。
$curl->getHeaders(); /* Array ( [response_code] => 200 [Date] => Sat, 21 May 2022 10:00:34 GMT [Content-Type] => application/json [Content-Length] => 291 [Connection] => keep-alive [Server] => gunicorn/19.9.0 [Access-Control-Allow-Origin] => * [Access-Control-Allow-Credentials] => true ) */
或
$curl->getHeaders(0);
getCookie()
返回请求响应中返回的指定cookie。头信息id在第二个参数中有效。
$curl->getCookie('XSRF-TOKEN'); // OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWEwYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjJjZDE1ZDZMGYwMGEwOA==
或
$curl->getCookie('XSRF-TOKEN', 0); // OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWEwYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjJjZDE1ZDZMGYwMGEwOA==
getCookiesRaw()
以cookie格式返回请求返回的cookie。头信息id在第一个参数中有效。
$curl->getCookiesRaw(); // laravel_session=eyJpdiI6InV5bGRQNFJ4c01TYjZwT0I0amxzS1E9PSIsInZhbHVlIjoiZFI2WWpVWGxmTldDcVJvVlwvbVJicXBxM0pjRkVRUlBRKzZWb1BkbzliZHBVdTlmUEV4UzZkaFVMbmlRTHNYczFOZm5HSWkwRXhjb3BJRGI1NGRyM2tnPT0iLCJtYWMiOiJjMjAwMWIyMGIxYmQwYzkxMGQyNGJhMDZmZDJiNThjNGZhMTUyZWVjZDlkNjg5ZWVjYjY2MGE1ZTlmZDAxOGNmIn0=
或
$curl->getCookiesRaw(0); // laravel_session=eyJpdiI6InV5bGRQNFJ4c01TYjZwT0I0amxzS1E9PSIsInZhbHVlIjoiZFI2WWpVWGxmTldDcVJvVlwvbVJicXBxM0pjRkVRUlBRKzZWb1BkbzliZHBVdTlmUEV4UzZkaFVMbmlRTHNYczFOZm5HSWkwRXhjb3BJRGI1NGRyM2tnPT0iLCJtYWMiOiJjMjAwMWIyMGIxYmQwYzkxMGQyNGJhMDZmZDJiNThjNGZhMTUyZWVjZDlkNjg5ZWVjYjY2MGE1ZTlmZDAxOGNmIn0=
getCookiesArray()
返回请求返回的cookie。头信息id在第一个参数中有效。如名称所示,返回的数据类型是数组。
$curl->getCookiesArray(); /* Array ( [laravel_session] => eyJpdiI6InV5bGRQNFJ4c01TYjZwT0I0amxzS1E9PSIsInZhbHVlIjoiZFI2WWpVWGxmTldDcVJvVlwvbVJicXBxM0pjRkVRUlBRKzZWb1BkbzliZHBVdTlmUEV4UzZkaFVMbmlRTHNYczFOZm5HSWkwRXhjb3BJRGI1NGRyM2tnPT0iLCJtYWMiOiJjMjAwMWIyMGIxYmQwYzkxMGQyNGJhMDZmZDJiNThjNGZhMTUyZWVjZDlkNjg5ZWVjYjY2MGE1ZTlmZDAxOGNmIn0= ) */
或
$curl->getCookiesArray(0); /* Array ( [laravel_session] => eyJpdiI6InV5bGRQNFJ4c01TYjZwT0I0amxzS1E9PSIsInZhbHVlIjoiZFI2WWpVWGxmTldDcVJvVlwvbVJicXBxM0pjRkVRUlBRKzZWb1BkbzliZHBVdTlmUEV4UzZkaFVMbmlRTHNYczFOZm5HSWkwRXhjb3BJRGI1NGRyM2tnPT0iLCJtYWMiOiJjMjAwMWIyMGIxYmQwYzkxMGQyNGJhMDZmZDJiNThjNGZhMTUyZWVjZDlkNjg5ZWVjYjY2MGE1ZTlmZDAxOGNmIn0= ) */
getBetween()
从请求接收到的响应中查找并返回指定范围内的文本。返回单个字符串数据。
// <p>asd</p> $curl->getBetween('<p>', '</p>'); //asd
第三个参数等于getResponse
方法的第一个参数。它删除响应中的额外空格。
$curl->getBetween('<p>', '</p>', true);
getBetweens()
从请求接收到的响应中查找并返回指定范围内的文本。返回多个数组数据。如果超过一个指定范围,则获取所有指定范围。
/* <p>test</p> <p>test 2</p> */ $curl->getBetweens('<p>', '</p>'); /* Array ( [0] => test [1] => test 2 ) */
第三个参数等于getResponse
方法的第一个参数。它删除响应中的额外空格。
// <p>test</p><p>test 2</p> $curl->getBetweens('<p>', '</p>', true); /* Array ( [0] => test [1] => test 2 ) */
其他方法详细信息
find()
它在对请求的响应执行文本搜索,如果找到任何结果,则返回对象类型的结果。可以搜索单个信息,也可以搜索多个信息。默认源是从getResponse
方法检索到的数据。可以将不同的源添加到可选的第二个参数。
检查title标签
$find = $curl->find("<title>Homepage</title>"); if ($find->result) { echo 'Bulunan: '.$find->finded; } /* stdClass Object ( [result] => 1 [finded] => <title>Anasayfa</title> ) */
或进行多个搜索。
$found = [ "<title>Homepage</title>", "Homepage", "Topic is added.", ]; $find = $curl->find($found); if ($find->result) { echo 'Founds: '; print_r($find->finded); } /* stdClass Object ( [result] => 1 [finded] => Array ( [0] => <title>Homepage</title> [1] => Homepage ) ) */
或添加不同的源。
$found = [ "<title>Homepage</title>", "Homepage", "Topic is added.", ]; $string = "<title>Homepage</title>Topic is added."; $find = $curl->find($found, $string); if ($find->result) { echo 'Found: '; print_r($find->finded); } /* stdClass Object ( [result] => 1 [finded] => Array ( [0] => <title>Homepage</title> [1] => Homepage ) ) */
getOpt()
返回使用setOpt
方法设置的常量值。名称不包含常量的名称。这是curl库提供的方式。
$curl->getOpt(); /* Array ( [42] => 1 [19913] => 1 [10036] => GET [10002] => https://www.google.com/ [80] => 1 [84] => 2 ) */
或
$curl->getOpt(CURLOPT_URL); // https://www.google.com/
常量详细信息
RAW
它允许检测请求中要发送的正文数据为纯文本。
$curl::RAW;
JSON
它使得检测请求中要发送的正文数据为json,并将其转换为json数据。
$curl::JSON;
QUERY
它使得检测请求中要发送的正文数据为表单,并将其转换为表单数据。
$curl::QUERY;