0x1881/curl

v0.1.7.1 2022-09-20 19:46 UTC

README

en tr

此包可以使用 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()

将类返回到默认请求设置。在每次请求中都将设置重置为默认值。

$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;