您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
yii2.0.3中使用guzzleHttp发送post数据
发布时间:2023-05-12 02:42:32编辑:雪饮阅读()
首先说下我的需求就是通过豆丁网的忘记密码来向一个邮箱发送验证码。但不是我手动点击,而是通过程序来完成。为了解决前端跨域问题,所以前端只是将这个提交给后台。
我后台是yii2.0.3.
那么一个post请求交给yii来处理,yii属于是php了,实际上可以用原生的curl都可以。
但是我这里做了一个挺傻的决定,我用guzzleHttp来实现。
虽然这个更优雅,但是yii2.0.3我本地本来是运行在php5.4.45nts上,如果要使用guzzlehttp,这里最新的是guzzlehttp7,然后我感觉yii其实有点老的感觉,就用了guzzlehttp6,没有想到guzzlehttp6好像是不能强制安装在yii2.0.3上面。。。。突然发现这些细节还是不说了,太多了。
总之就是最后我采用的环境是:
php5.5.9nts(因为默认支持tlsv1.2),好像是composer和所依赖的资源github之类的搞的现在tlsv1.2之前的都有问题。
composer1.8.5的phar版本(官网下载),好像phpstudy中的非phar(即直接没有后缀的那个版本有点问题)
GuzzleHttp5 可能是不太好弄GuzzleHttp6,或者我理解错了,应该支持GuzzleHttp6,可能我某些地方没有配置ok吧。
那么安装guzzleHttp(需要在basic目录安装(当然了,我这里下载的就是basic版本))如:
D:\phpstudy_pro\WWW\www.xyyii.com\basic>D:\phpstudy_pro\Extensions\php\php5.5.9nts\php.exe -c D:\phpstudy_pro\Extensions\php\php5.5.9nts\php.ini D:\phpstudy_pro\Extensions\composer185.phar require guzzlehttp/guzzle:~5.0
这里可能会报错:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- yiisoft/yii2-composer 2.0.3 requires composer-plugin-api 1.0.0 -> no matching package found.
- yiisoft/yii2-composer 2.0.3 requires composer-plugin-api 1.0.0 -> no matching package found.
- yiisoft/yii2-composer 2.0.3 requires composer-plugin-api 1.0.0 -> no matching package found.
- Installation request for yiisoft/yii2-composer (locked at 2.0.3) -> satisfiable by yiisoft/yii2-composer[2.0.3].
这种情况你只需要执行如:
D:\phpstudy_pro\Extensions\php\php5.5.9nts\php.exe -c D:\phpstudy_pro\Extensions\php\php5.5.9nts\php.ini D:\phpstudy_pro\Extensions\composer185.phar update yiisoft/yii2-composer
然后再次执行上面的安装guzzlehttp的命令即可
后端实现(控制器):
为了前端可以直接提交给后端,并且只是一个简单的demo级别功能,所以我不使用yii默认的csrf那种麻烦的数据提交机制,并且GuzzleHttp5中请求语法没有GuzzleHttp6那么爽快,那么具体控制器如:
<?php
namespace app\controllers;
use yii\web\Controller;
use GuzzleHttp\Client;
class EmailAttackController extends Controller{
//关闭token验证
public $enableCsrfValidation = false;
public function actionIndex(){
return $this->renderPartial('emailAttack');
}
//豆丁网-忘记密码
public function actionFf1(){
$url="https://www.docin.com/app/findPassword";
$request=\YII::$app->request;
$email=$request->post('login_email');
$client = new \GuzzleHttp\Client([
'defaults' => [
'verify' => false,
]
]);
$formParams = [
'login_email' =>$email,
];
$body = http_build_query($formParams);
$response = $client->post($url, [
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
],
'body' => $body,
]);
echo $response->getBody();
}
}
然后视图层其实很简单的
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="/basic/web/js/jquery-1.11.1.min.js"></script> <script> //豆丁网-忘记密码 function ff1(){ $.ajax({ url:'/basic/web/index.php?r=emailattack/ff1', data:{ login_email:"675512626@qq.com" }, method:'post' }); } $(document).ready(function(){ ff1(); }); </script> </head> <body> </body> </html>
关键字词:yii,guzzlehttp,post