Encapsulated PHP sends HTTP requests with curl. Get and post are very easy to use

Hear the bell in the night rain 2021-09-15 04:47:04
encapsulated php sends http requests


I have encapsulated a relatively perfect curl Request function , compatible get and post, Content format compatible json and x-www-form-urlencoded, compatible http and https. And wrote very detailed notes , People who need it can follow the notes , Custom modification code , To achieve the desired effect . Environmental requirements PHP7

Go straight to the code

if (!function_exists('curl_request')) {
/**
* Notes: curl send out http request
* User: Hear the bell in the night rain
* @param string $url Requested url
* @param bool $is_post Is it post request
* @param array $data Request parameters
* @param array $header Request header explain : The format request header should take effect in this way ['Authorization:0f5fc4730e21048eae936e2eb99de548']
* @param bool $is_json Is it json request , The default is Content-Type:application/x-www-form-urlencoded
* @param int $time_out Timeout time Unit second ,0 Never time out
* @return mixed
*/
function curl_request(string $url, bool $is_post = true, array $data = [], array $header = [], bool $is_json = false, int $time_out = 0)
{
if (empty($url)) {
return false;
}
// initialization curl
$curl = curl_init();
// If curl edition , Greater than 7.28.1, It has to be 2 Talent . and 7.0 Version of php Self contained curl Version is 7.40.1. Use php7 The above , To make sure there's no problem
$ssl = (strpos($url,'https') !== false) ? 2 : 0;
$options = [
// Set up url
CURLOPT_URL => $url,
// Output the information of the header file as a data stream
CURLOPT_HEADER => false,
// The request result is returned as a string , No direct output
CURLOPT_RETURNTRANSFER => true,
// prohibit cURL Verify peer certificate
CURLOPT_SSL_VERIFYPEER => false,
//identity", "deflate", "gzip“, Three coding methods , If it is set to an empty string , Three coding methods are supported . When there is garbled code , This string can be set
CURLOPT_ENCODING => '',
// Set up http edition .HTTP1.1 It's mainstream http edition
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
// The longest waiting time when connecting to the other host . Set to 10 seconds , If the other server 10 No response in seconds , Then actively disconnect the link . by 0 be , Unlimited server response time
CURLOPT_CONNECTTIMEOUT => $time_out,
// Whole cURL Maximum wait time for function execution , in other words , This time includes the connection waiting time
CURLOPT_TIMEOUT => 0,
// Check the server SSL Whether there is a common name in the certificate
CURLOPT_SSL_VERIFYHOST => $ssl,
// Set header information
CURLOPT_HTTPHEADER => $header
];
//post and get Special treatment
if ($is_post) {
// Set up POST request
$options[CURLOPT_POST] = true;
if ($is_json && $data) {
//json Handle
$data = json_encode($data);
$header = array_merge($header, ['Content-Type: application/json']);
// Set header information
$options[CURLOPT_HTTPHEADER] = $header;
// If it is json String mode , Out-of-service http_build_query function
$options[CURLOPT_POSTFIELDS] = $data;
} else {
//x-www-form-urlencoded Handle
// If it's an array , To add http_build_query, If not , If you encounter a two-dimensional array, you will report an error .
$options[CURLOPT_POSTFIELDS] = http_build_query($data);
}
} else {
// GET
$options[CURLOPT_CUSTOMREQUEST] = 'GET';
// No, ? And data Not empty , Splice parameters to url in
if (strpos($url,'?') === false && !empty($data) && is_array($data)) {
$params_arr = [];
foreach ($data as $k => $v) {
array_push($params_arr,$k . '=' . $v);
}
$params_string = implode('&',$params_arr);
$options[CURLOPT_URL] = $url . '?' . $params_string;
}
}
// Array mode setting curl, Than multiple use curl_setopt The function is set to be faster
curl_setopt_array($curl,$options);
// Perform the requested
$response = curl_exec($curl);
// Back to CONTENT_TYPE type
$content_type = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
// Back to http Status code
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// When there are no mistakes curl_errno return 0
if (curl_errno($curl) == 0) {
$result = [
'HTTP_MSG' => 'SUCCESS',
'HTTP_BODY' => json_decode($response, true),
'HTTP_HEADER' => $content_type,
'HTTP_CODE' => $http_code,
];
} else {
$result = [
'HTTP_MSG' => curl_error($curl),
'HTTP_BODY' => null,
'HTTP_HEADER' => $content_type,
'HTTP_CODE' => $http_code,
];
}
// Close request
curl_close($curl);
return $result;
}
}

In addition to requesting other people's interface data . You can also pull files generated by others . Like someone else's url yes http://47.97.185.90:8060/demo..., Put the returned content result['HTTP_BODY'] adopt file_put_contents($file_name, result['HTTP_BODY']) Write to your corresponding directory .

This article is a creative article on the night rain smell of suzuhara , Reprint does not need to contact me , But please indicate the source of the article . The article citations : The thought of hearing the bell in the night rain (https://segmentfault.com/u/ye...)

版权声明
本文为[Hear the bell in the night rain]所创,转载请带上原文链接,感谢
https://javamana.com/2021/09/20210909113704914X.html

  1. Huawei cloud guassdb (for redis) released a new version: Lua script and SSL connection encryption
  2. Java thread pool - work queue
  3. 一名畢業三年的女程序媛面試頭條經驗,關於Redis主從節點數據過期一致性的思考,
  4. Trois ans d'expérience d'entrevue avec une femme de programmation diplômée, une réflexion sur la cohérence de l'expiration des données de redis Master slave Node,
  5. Un plan de carrière Java correct, découvrez les questions que vous devez poser lors de l'entrevue d'embauche du printemps Java de cette année.
  6. 万字详解微服务的哨兵机制,架构师带你玩转Redis高性能缓存设计实战,
  7. Un article vous a appris à gérer les entrevues sur le Web, à partager 350 vraies questions d'entrevue Java,
  8. Jquery Tools Methodology collation, Sharing a little interview Experience
  9. Tutoriel de développement Java, compétences de base nécessaires pour interviewer un programmeur Java dans une grande usine,
  10. "Anti Mafia storm" has just finished, another criminal investigation play has come, and the supporting actor is more popular than the protagonist
  11. 萬字詳解微服務的哨兵機制,架構師帶你玩轉Redis高性能緩存設計實戰,
  12. L'architecte vous guidera dans la conception de cache haute performance de redis.
  13. Linux驱动开发: 杂项字符设备
  14. Jquery plug - in urianchor, app front end Development
  15. Linux驅動開發: 雜項字符設備
  16. Développement de pilotes Linux: périphériques de caractères divers
  17. Utilisez @ async dans Spring boot pour effectuer des appels asynchrones et accélérer l'exécution des tâches!
  18. $in jquery, Visualized Web Development Tool
  19. Le développement Java doit être fait. Les entrevues https demandent souvent une analyse complète.
  20. 不明白JVM虚拟机还怎么面试,一起刷完了这份1307页的Java面试宝典吧,
  21. 不断提升自己创造溢价的能力,字节跳动 阿里 华为 腾讯等大厂Java面试题,
  22. Jdk's Past Life: The Classic Features of Thin Number - java5 - - - 15 -, webfront Development
  23. Résumé des questions d'entrevue pour les ingénieurs en développement Java, analyse des questions d'entrevue à haute fréquence Dubbo,
  24. Améliorer continuellement leur capacité à créer des primes, et les questions d'entrevue Java d'Alibaba Huawei Tencent et d'autres grandes usines sont sautées en octets.
  25. Install docker YJ version of openSUSE 11.3
  26. Je ne comprends pas comment la machine virtuelle JVM peut encore interviewer, et j'ai terminé ce dictionnaire d'entrevue Java de 1307 pages.
  27. 中软国际Java机试,如何写出高效率的SQL?
  28. 中级Java工程师面试,阿里 头条 腾讯等大厂Java笔试题目分享,
  29. 两年Java开发经验,为什么spring能最好地改变Java?
  30. Echarts realizes the rotation of the moon (super simple, you can see it at a glance)
  31. Deux ans d'expérience dans le développement de Java, pourquoi Spring peut - il le mieux changer Java?
  32. Entretien d'ingénieur Java intermédiaire, partage de sujets d'examen écrit Java de grandes usines comme Alibaba headline Tencent,
  33. Zhongsoft International Java Machine test, comment écrire un SQL efficace?
  34. Reflection type of Java Foundation
  35. Comment gérer efficacement les changements dans les ressources k8s?Analyse du mécanisme de mise en œuvre de k8s informer
  36. Installation de jdk1.8
  37. MySQL column - Linux underlying interaction and RAID storage architecture
  38. Interviewer: do redis transactions satisfy atomicity?
  39. 兩年Java開發經驗,為什麼spring能最好地改變Java?
  40. Migration practice from zookeeper to Nacos
  41. Dubbo's past and present life
  42. Initial experience of Dubbo application level service discovery
  43. Measure the Dubbo function of Tengine open source
  44. Comment envoyer 100 000 requêtes http le plus rapidement possible
  45. Huawei cloud guassdb (for redis) released a new version: Lua script and SSL connection encryption
  46. Mybatis vs hibernate, which performance is better?
  47. Python - Programmation orientée objet - _Rapport()
  48. Python - Programmation orientée objet - _Appel()
  49. JQuery Basics
  50. 五年Java开发经验面试,揭秘今年Java春招面试必问问题有哪些?
  51. 互联网Java工程师面试题,遇到的面试官都是架构师级别,
  52. Python - Programmation orientée objet - _Nouveau() et mode Singleton
  53. Python - Programmation orientée objet - méthode magique (méthode de double soulignement)
  54. Python - Programmation orientée objet - pratique (6)
  55. Python - Programmation orientée objet - réflexion hasattr, GetAttr, GetAttr, delattr
  56. Python - Programmation orientée objet - _Dict
  57. Computer graduation project java + SSM sorting algorithm online reading system
  58. Les questions d'entrevue pour les ingénieurs Java d'Internet, les intervieweurs rencontrés sont tous de niveau architecte,
  59. Cinq ans d'entrevue d'expérience en développement Java, découvrez les questions que vous devez poser lors de l'entrevue d'embauche du printemps Java de cette année.
  60. Java or the king of enterprise software- sivalabs