php curl 获取 discuz时最后一步 发帖错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php curl 获取 discuz时最后一步 发帖错误相关的知识,希望对你有一定的参考价值。
发帖的地址提示参数错误,用curl获取的发贴地址,手动填写提交也是提示参数错误(这个估计是referer的问题)
http://127.0.0.2/forum.php?mod=post&action=newthread&fid=37&extra=&topicsubmit=yes.'&formhash='.$formhash.'&posttime='.$time.'&wysiwyg=1&typeid=50&subject=asdsasdad&message=asssadsad%0D%0A&replycredit_extcredits=0&replycredit_times=1&replycredit_membertimes=1&replycredit_random=100&readperm=&price=&tags=asdsad&rushreplyfrom=&rushreplyto=&rewardfloor=&replylimit=&stopfloor=&creditlimit=&allownoticeauthor=1&usesig=1&save=';
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $REQUEST);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_setopt ($ch, CURLOPT_REFERER, "http://127.0.0.2/forum.php?mod=post&action=newthread&fid=37");
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$es=curl_exec($ch);
curl_close($ch);
print_r($es);
如果真是 referer 的问题,也可以伪造。搜一下就知道了。
理论上,所有的客户端事件都可以模拟。
除了绑定硬件、安装额外插件等。
PHP通过curl向其它服务器发请求并返回数据
在很多时候,我们都需要请求第三方的服务器来获取一些数据,比如token,比如百度的主动推送,那么我们的php如何实现向第三方服务器发请求呢?我们可以通过curl来实现
首先定义请求的url,然后创建httpHeader的头,定义通过post方式发送请求的参数:
初始化curl:
1 $url="URL地址"; 2 3 //然后创建httpHeader的头: 4 5 $httpHeader=createHttpHeader(); 6 7 //定义通过post方式发送请求的参数: 8 9 $curlPost="userId=".$userId."&name=".$nickName."&portraitUri=".$headImg; 10 11 //初始化curl: 12 13 $ch=curl_init();undefined
发送请求:
1 curl_setopt($ch,CURLOPT_URL,$url); 2 curl_setopt($ch,CURLOPT_HTTPHEADER,$httpHeader); 3 curl_setopt($ch,CURLOPT_HEADER,false); 4 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 5 curl_setopt($ch,CURLOPT_POST,1); 6 curl_setopt($ch,CURLOPT_POSTFIELDS,$curlPost); 7 curl_setopt($ch,CURLOPT_TIMEOUT,30); 8 curl_setopt($ch,CURLOPT_DNS_USE_GLOBAL_CACHE,false); 9 curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);undefined
接收返回的数据:$data=curl_exec($ch);关闭curl:curl_close($ch);这样就通过curl完成了一次post请求,并获取到了返回的数据。
完整PHP源码如下:
1 $url="请求的URL地址"; 2 $httpHeader=createHttpHeader(); 3 $curlPost="userId=".$userId."&name=".$nickName."&portraitUri=".$headImg; 4 $ch=curl_init(); 5 curl_setopt($ch,CURLOPT_URL,$url); 6 curl_setopt($ch,CURLOPT_HTTPHEADER,$httpHeader); 7 curl_setopt($ch,CURLOPT_HEADER,false); 8 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 9 curl_setopt($ch,CURLOPT_POST,1); 10 curl_setopt($ch,CURLOPT_POSTFIELDS,$curlPost); 11 curl_setopt($ch,CURLOPT_TIMEOUT,30); 12 curl_setopt($ch,CURLOPT_DNS_USE_GLOBAL_CACHE,false); 13 curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 14 $data=curl_exec($ch); 15 curl_close($ch);undefined
以上是关于php curl 获取 discuz时最后一步 发帖错误的主要内容,如果未能解决你的问题,请参考以下文章
在LINUX下安装DISCUZ出现的错误:advice_mysqli_connect 解决方法。