PHP如何使用cURL设置Get和Post请求
PHP使用cURL设置Get和Post请求的方法:首先初始化【curl_init()】,并设置变量;然后执行并获取结果【curl_exec()】;最后释放cURL句柄【curl_close()】。【相关学习推荐:php图文教程】PHP使用cURL设置Get和Post请求的方法:1.cURL介绍cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 库。本文将介绍 cURL 的一些高级特性,以及在PHP中如何运用它。2.基本结构在学习更为复杂的功能之前,先来看一下在PHP中建立cURL请求的基本步骤:(1)初始化curl_init()(2)设置变量curl_setopt()最为重要,一切玄妙均在此。有一长串cURL参数可供设置,它们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难,所以今天我们只试一下那些更常用也更有用的选项。(3)执行并获取结果curl_exec()(4)释放cURL句柄curl_close()3.cURL实现Get和Post3.1 Get方式实现代码如下://初始化$ch = curl_init();//设置选项,包括URLcurl_setopt($ch, CURLOPT_URL, "https://www.jb51.net");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 0);//执行并获取HTML文档内容$output = curl_exec($ch);//释放curl句柄curl_close($ch);//打印获得的数据print_r($output);3.2 Post方式实现代码如下: $url = "http://localhost/web_services.php";$post_data = array ("username" => "bob","key" => "12345");$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// post数据curl_setopt($ch, CURLOPT_POST, 1);// post的变量curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);//打印获得的数据print_r($output);以上方式获取到的数据是json格式的,使用json_decode函数解释成数组。$output_array = json_decode($output,true);如果使用json_decode($output)解析的话,将会得到object类型的数据。相关学习推荐:php编程(视频)
请教一个PHP CURL的POST提交遇到的问题
使用http代替https,然后抓包,看一下http请求到底有什么不同.
另外,CURLOPT_SSL_VERIFYHOST官方文档有说明:
禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。
所以首先CURLOPT_SSL_VERIFYPEER是设置为false的,所以CURLOPT_SSL_VERIFYHOST也要为false
还有, 看请求认证并不是使用http auth, 为什么添加curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
最后,官方文档对于CURLOPT_POSTFIELDS的解释
如果value是一个数组,Content-Type头将会被设置成multipart/form-data
而接口文档中明确说明
请求接口(建议使用post请求,注意不要使用multipart-post):
所以可以尝试
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($data));
最后的最后,试试下面的代码:
全选复制放进笔记<?php
header('Content-Type:text/html;charset=utf-8');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL;
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = array(
'api_user' => '*',
'api_key' => '*',
'address' => 'runnerlee@maillist.sendcloud.org',
'name' => 'Abao新建的测试邮件列表',
'description' => '这是Abao新建的测试邮件列表',
);
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($data));
if(false === $result=curl_exec($ch)) {
echo 'false:
';
}
var_dump(json_decode($result,true));
curl_close($ch);
有些情况下确实用curl是不行的,淘宝的接口也有这个问题,可以通过在html页面用javascript自动跳提交表单来实现