[{"data":1,"prerenderedAt":61},["ShallowReactive",2],{"article-108":3},{"code":4,"msg":5,"data":6,"count":14},200,"查询成功",{"id":7,"title":8,"keywords":9,"description":10,"category_id":11,"content":12,"body_html":13,"thumb_up":14,"clicks":15,"sort":14,"remark":13,"status":16,"is_open":16,"is_deleted":14,"is_top":16,"is_recommend":16,"create_time":17,"update_time":17,"image_id":18,"url":13,"member_id":14,"cate_name":19,"prev":20,"next":23,"tags":26,"words":32,"read_time":33,"comments":14,"cover":34,"relevant":35},108,"PHP中使用cURL实现Get和Post请求的方法","php,curl","CURL是一个利用URL语法在命令行下工作的文件传输工具，cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、等，并且还支持SSL认证、HTTP POST、HTTP PUT、FTP上传。最让人高兴的是，PHP也支持 CURL 库，利用cURL库编写的脚本，可以通过一个网址的链接抓取一个指定的页面内容，并分析得到你想要的数据了",2,"cURL是一个利用URL语法在命令行下工作的文件传输工具，cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、等，并且还支持SSL认证、HTTP POST、HTTP PUT、FTP上传。最让人高兴的是，PHP也支持 CURL 库，利用cURL库编写的脚本，可以通过一个网址的链接抓取一个指定的页面内容，并分析得到你想要的数据了\n### cURL使用步骤\n1.初始化  \n\n```php\ncurl_init()\n```\n2、设置属性 \n```php\ncurl_setopt()\n```\n3，执行并获取结果\n```php\ncurl_exec()\n```\n4.释放句柄\n```php\ncurl_close()\n```\n### CURL实现GET请求\n发送GET请求的关键是拼装格式正确的URL。请求地址和GET数据由一个“?”分割,然后GET变量的名称和值用“=”分隔，各个GET名称和值由“&”连接。PHP为我们提供了一个函数专门用来拼装GET请求和数据部分——http_build_query,该函数接受一个关联数组，返回由该关联数据描述的GET请求字符串。\n示例代码：\n```php\n$data = array(\n    \"username\" => \"admin\",\n    \"password\" => \"12345\"\n);\n$url = 'http:\u002F\u002Fwww.text.com';\n\u002F\u002F初始化\n$ch = curl_init();\n\u002F\u002F设置选项，包括URL\n$url = $url.'?'.http_bulid_query($data);\ncurl_setopt($ch, CURLOPT_URL, $url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\ncurl_setopt($ch, CURLOPT_HEADER, 0);\n\u002F\u002F执行并获取HTML文档内容\n$output = curl_exec($ch);\n\u002F\u002F释放curl句柄\ncurl_close($ch);\n\u002F\u002F打印获得的数据\nprint_r($output);\n```\n### CURL实现POST请求\n可以使用CURL提供的选项CURLOPT_POSTFIELDS，设置该选项为POST字符串数据就可以把请求放在正文中。同样我们实现了一个发送POST请求的函数\n\n示例代码\n```php\n$url = \"http:\u002F\u002Fwww.test.com\u002Fpost.php\";\n$post_data = array (\"username\" => \"bob\",\"key\" => \"12345\");\n$ch = curl_init();\ncurl_setopt($ch, CURLOPT_URL, $url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\n\u002F\u002F post数据\ncurl_setopt($ch, CURLOPT_POST, 1);\n\u002F\u002F post的变量\ncurl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);\n$output = curl_exec($ch);\ncurl_close($ch);\n\u002F\u002F打印获得的数据\nprint_r($output);\n```\n### CURL封装函数代码\n```php\n\u002F\u002F参数1：访问的URL，参数2：post数据(不填则为GET)，参数3：提交的$cookies,参数4：是否返回$cookies\nfunction curl_request($url,$post='',$cookie='', $returnCookie=0){\n    $curl = curl_init();\n    curl_setopt($curl, CURLOPT_URL, $url);\n    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla\u002F5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\u002F6.0)');\n    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);\n    curl_setopt($curl, CURLOPT_AUTOREFERER, 1);\n    curl_setopt($curl, CURLOPT_REFERER, \"http:\u002F\u002FXXX\");\n    if($post) {\n        curl_setopt($curl, CURLOPT_POST, 1);\n        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));\n    }\n    if($cookie) {\n        curl_setopt($curl, CURLOPT_COOKIE, $cookie);\n    }\n    curl_setopt($curl, CURLOPT_HEADER, $returnCookie);\n    curl_setopt($curl, CURLOPT_TIMEOUT, 10);\n    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\n    $data = curl_exec($curl);\n    if (curl_errno($curl)) {\n        return curl_error($curl);\n    }\n    curl_close($curl);\n    if($returnCookie){\n        list($header, $body) = explode(\"\\r\\n\\r\\n\", $data, 2);\n        preg_match_all(\"\u002FSet\\-Cookie:([^;]*);\u002F\", $header, $matches);\n        $info['cookie']  = substr($matches[1][0], 1);\n        $info['content'] = $body;\n        return $info;\n    }else{\n        return $data;\n    }\n}\n```\n### 补充说明\n如果使用cURL获取的数据为 json格式的，可以使用 json_decode()函数转化成数组\n```php\n$array = json_decode($data,true);\n```\n注意：json_decode()函数中第个参数不填写的化，会把 json 转成对象的形式，如果填写则转为数组。\n### 关于 curl_setopt() 中的参数介绍\n```php\nCURLOPT_NOBODY: \u002F\u002F如果你不想在输出中包含body部分，设置这个选项为一个非零值。\nCURLOPT_FAILONERROR: \u002F\u002F如果你想让PHP在发生错误(HTTP代码返回大于等于300)时，不显示，设置这个选项为一人非零值。默认行为是返回一个正常页，忽略代码。\nCURLOPT_INFILESIZE: \u002F\u002F当你上传一个文件到远程站点，这个选项告诉PHP你上传文件的大小。\nCURLOPT_VERBOSE: \u002F\u002F如果你想CURL报告每一件意外的事情，设置这个选项为一个非零值。\nCURLOPT_HEADER: \u002F\u002F如果你想把一个头包含在输出中，设置这个选项为一个非零值。\nCURLOPT_NOPROGRESS: \u002F\u002F如果你不会PHP为CURL传输显示一个进程条，设置这个选项为一个非零值。\n\u002F\u002F注意：PHP自动设置这个选项为非零值，你应该仅仅为了调试的目的来改变这个选项。\nCURLOPT_UPLOAD: \u002F\u002F如果你想让PHP为上传做准备，设置这个选项为一个非零值。\nCURLOPT_POST: \u002F\u002F如果你想PHP去做一个正规的HTTP POST，设置这个选项为一个非零值。这个POST是普通的 application\u002Fx-www-from-urlencoded 类型，多数被HTML表单使用\nCURLOPT_FTPLISTONLY: \u002F\u002F设置这个选项为非零值，PHP将列出FTP的目录名列表。\nCURLOPT_FTPAPPEND: \u002F\u002F设置这个选项为一个非零值，PHP将应用远程文件代替覆盖它。\nCURLOPT_NETRC: \u002F\u002F设置这个选项为一个非零值，PHP将在你的 ~.\u002Fnetrc 文件中查找你要建立连接的远程站点的用户名及密码。\nCURLOPT_FOLLOWLOCATION: \u002F\u002F设置这个选项为一个非零值(象 'Location: ')的头，服务器会把它当做HTTP头的一部分发送(注意这是递归的，PHP将发送形如 'Location: '的头)。\nCURLOPT_RESUME_FROM: \u002F\u002F传递一个包含字节偏移地址的长整形参数，(你想转移到的开始表单)。\nCURLOPT_SSLVERSION: \u002F\u002F传递一个包含SSL版本的长参数。默认PHP将被它自己努力的确定，在更多的安全中你必须手工设置。\nCURLOPT_TIMECONDITION: \u002F\u002F传递一个长参数，指定怎么处理CURLOPT_TIMEVALUE参数。你可以设置这个参数为TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。这仅用于HTTP。\nCURLOPT_TIMEVALUE: \u002F\u002F传递一个从1970-1-1开始到现在的秒数。这个时间将被CURLOPT_TIMEVALUE选项作为指定值使用，或被默认TIMECOND_IFMODSINCE使用。\nCURLOPT_PUT: \u002F\u002F设置这个选项为一个非零值去用HTTP上传一个文件。要上传这个文件必须设置CURLOPT_INFILE和CURLOPT_INFILESIZE选项.\nCURLOPT_MUTE: \u002F\u002F设置这个选项为一个非零值，PHP对于CURL函数将完全沉默。\nCURLOPT_TIMEOUT: \u002F\u002F设置一个长整形数，作为最大延续多少秒。\nCURLOPT_LOW_SPEED_LIMIT: \u002F\u002F设置一个长整形数，控制传送多少字节。\nCURLOPT_LOW_SPEED_TIME: \u002F\u002F设置一个长整形数，控制多少秒传送CURLOPT_LOW_SPEED_LIMIT规定的字节数。\n \n\u002F\u002F下列选项的值将被作为字符串：\nCURLOPT_URL: \u002F\u002F这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项。\nCURLOPT_USERPWD: \u002F\u002F传递一个形如[username]:[password]风格的字符串,作用PHP去连接。\nCURLOPT_PROXYUSERPWD: \u002F\u002F传递一个形如[username]:[password] 格式的字符串去连接HTTP代理。\nCURLOPT_RANGE: \u002F\u002F传递一个你想指定的范围。它应该是'X-Y'格式，X或Y是被除外的。HTTP传送同样支持几个间隔，用逗句来分隔(X-Y,N-M)。\nCURLOPT_POSTFIELDS: \u002F\u002F传递一个作为HTTP “POST”操作的所有数据的字符串。\nCURLOPT_REFERER: \u002F\u002F在HTTP请求中包含一个'referer'头的字符串。\nCURLOPT_USERAGENT: \u002F\u002F在HTTP请求中包含一个'user-agent'头的字符串。\nCURLOPT_FTPPORT: \u002F\u002F传递一个包含被ftp 'POST'指令使用的IP地址。这个POST指令告诉远程服务器去连接我们指定的IP地址。 这个字符串可以是一个IP地址，一个主机名，一个网络界面名(在UNIX下)，或是‘-'(使用系统默认IP地址)。\nCURLOPT_COOKIE: \u002F\u002F传递一个包含HTTP cookie的头连接。\nCURLOPT_SSLCERT: \u002F\u002F传递一个包含PEM格式证书的字符串。\nCURLOPT_SSLCERTPASSWD: \u002F\u002F传递一个包含使用CURLOPT_SSLCERT证书必需的密码。\nCURLOPT_COOKIEFILE: \u002F\u002F传递一个包含cookie数据的文件的名字的字符串。这个cookie文件可以是Netscape格式，或是堆存在文件中的HTTP风格的头。\nCURLOPT_CUSTOMREQUEST: \u002F\u002F当进行HTTP请求时，传递一个字符被GET或HEAD使用。为进行DELETE或其它操作是有益的\n\n```\n**注意**: 在确认你的服务器支持命令先不要去这样做。",null,0,88,1,"2025-05-09 23:01:22",62,"PHP",{"id":21,"title":22},107,"PHP 导出 Excel 的三种常用方法",{"id":24,"title":25},109,"thinkphp6加swoole高并发上传图片",[27,29],{"id":28,"name":19},25,{"id":30,"name":31},71,"Curl",3871,9,"https:\u002F\u002Ftp.myong.top\u002Fstorage\u002Fwechat\u002F505bf7fd163ad29e8ce69c9281fa05056fe3328c.jpeg",[36,41,46,51,56],{"id":37,"title":38,"create_time":39,"description":40},93,"PHP执行Python脚本解压，压缩文件夹操作","2020-08-06 14:59:05","PHP是有解压缩类文件的，但在实际项目中，用户方使用Python脚本压缩，很容易出现中文解压乱码，导致文件内容丢失的情况，本文主要介绍PHP执行Python脚本解压缩出现的问题以及解决方法",{"id":42,"title":43,"create_time":44,"description":45},92,"PHP对图片的处理","2020-07-30 15:53:38","图片处理函数功能：缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色处理并保存历史记录的思路：当有图片有改动时自动生成一张新图片",{"id":47,"title":48,"create_time":49,"description":50},96,"PHP中字符串跟0做比较永远是true","2021-02-04 16:16:27","最近在项目中做数据对比的功能，发现一个特殊的情况，0跟任何字符串做比较永远返回true，特意了解了一下。",{"id":52,"title":53,"create_time":54,"description":55},13,"Win系统下配置PHP链接Oracle","2019-01-17 22:23:36","该文章内容主要介绍window系统下，php连接oracle的配置。",{"id":57,"title":58,"create_time":59,"description":60},103,"面向对象三大特性五大原则 + 低耦合高内聚[转载]","2021-10-31 23:18:58","面向对象的三大特性是\"封装、\"多态\"、\"继承\"，五大原则是\"单一职责原则\"、\"开放封闭原则\"、\"里氏替换原则\"、\"依赖倒置原则\"、\"接口分离原则\"。",1783431654207]