note 123867 deleted from book.curl by cmb
| From: | cmb@php.net | Date: | Tue, 21 May 2019 15:19:56 +0000 |
| Subject: | note 123867 deleted from book.curl by cmb | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-211096@lists.php.net to get a copy of this message | ||
Note Submitter: tech dot myapp at gmail dot com
----
/**
* @From: https://github.com/www-schat-top
* @Usage:
1)get
$rtv = Curl::go("https://??.com");
$rtv = Curl::go(["url"=>"https://??.com"]);
2)post
$rtv = Curl::go(["url"=>"https://??.com",
"data"=>["user"=>"john","age"=>28]]);
3)post json string
$rtv = Curl::go(["url"=>"https://??.com",
"data"=>json_encode(["user"=>"john","age"=>28]),
"json"=>true]);
==>
file_get_contents("php://input") //
'{"user":"john","age":20}'
json_decode(file_get_contents("php://input")) // ( [user] => john [age] =>
20 )
4)upload file and add headers
$rtv = Curl::go(["url"=>"https://??.com",
"data"=>["user"=>"john","age"=>28, 'file'
=> new \CURLFile(realpath("/tmp/2.tar.gz")),'max' => '20M',
'header'=>[....]]]);
==> $_POST['user'] = "john",
$_POST['age'] = 28
$_FILES['file']['name'] => 2.tar.gz
$_FILES['file']['type'] => application/octet-stream
$_FILES['file']['tmp_name'] => /tmp/phpW75BcK
$_FILES['file']['error'] => 0
$_FILES['file']['size'] => 6645
@return
[
"errno" => 0,
"error" => "",
"code" => 200,
"url" => "http://??.com/a.php",
"ip" => "127.0.0.1",
"header" => "
HTTP/1.1 200 OK
...
",
"body" => "....",
"info" => [
"url" => "http://schat.top",
"content_type" => "text/html; charset=UTF-8",
"http_code" => 200,
...
]
]
*/
class Curl {
public static function go($arr) {
if(!is_array($arr) && is_string($arr) &&
preg_match("/^https?:\/\//",$arr) == 1) {
$arr=["url"=>$arr];
}
$arr_fix = [
'data' => [],
'header'=> [],
'json' => false,
'max' => '20M',
'timeout' => 600,
];
$arr=array_merge($arr_fix,$arr);
ini_set('upload_max_filesize', $arr['max']);
ini_set('post_max_size', '20M');
ini_set('memory_limit', '128M');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $arr['url']);
$data = $arr['data'];
if(is_array($data) && count($data)>0 || is_string($data)){
curl_setopt($ch, CURLOPT_POST, 1);
if($arr['json'])
$arr['header'][] = 'Content-Type: application/json; charset=utf-8;';
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
$header_fix = [
'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/71.0.3578.98 Safari/537.36',
];
$header = array_merge($header_fix,$arr['header']);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, $arr['timeout']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_ENCODING , "");
curl_setopt($ch, CURLOPT_VERBOSE, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, tmpfile());
$rtv = curl_exec($ch);
$errno = curl_errno($ch); // 0 is no error
$error = curl_error($ch);
$code = curl_getinfo($ch,CURLINFO_HTTP_CODE);
$resp_header = mb_substr($rtv,0,curl_getinfo($ch, CURLINFO_HEADER_SIZE));
$body = mb_substr($rtv,curl_getinfo($ch, CURLINFO_HEADER_SIZE));
$info = curl_getinfo($ch);
curl_close($ch);
return [
'errno' => $errno,
'error' => $error,
'code' => $code,
'url' => $info['url'],
'ip' => $info['primary_ip'],
'header' => $resp_header,
'body' => $body,
'info' => $info
];
}
}