问题描述
需要向xx网站提交一个数据,但是java和python那边都成功了,而php不行
问题出现的环境背景及自己尝试过哪些方法
步骤就俩,1 curl get获得token 2 组装数据,提交post,问题出现在第二步上,返回值为空
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
header("content-type:text/html;charset=utf8");
//复用
$ch = curl_init();
function request($url,$post='',$headers)
{
global $ch;
//$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if($post) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
if($post){
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
return curl_exec($ch);
}
$mcId = "mobi02-cdwl-s226";
#获取token
$url = "https://e.pingan.com/pa18shoplife/details/out/ob/qnyc-jynj/quote.jsp";
$headers = array('user-agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Mobile Safari/537.36');
$file = request($url,'',$headers);
$from = '<input type="hidden" id="tokenData" name="tokenData" value="';
$end = '">';
$message=explode($from,$file);
$message=explode($end,$message[1]);
$token = $message[0];
#伪造请求
$url = "https://e.pingan.com/pa18shoplife/engine.ajax?flowId=&reqId=_details_out_ob_qnyc-jynj_quote_jsp_quoteReq4&WT.mc_id=mobi02-cdwl-s226-xqb";
$body = "{\"reflowId\": \"\", \"lifeDatas\": {\"mediaSource\": \"mobi02-cdwl-s226-xqb\", \"tbhuomian\": \"0\", \"yiliaobxj\": \"0\", \"jibingbx\": \"0\", \"jibingSums\": \"0\"}, \"createFlow\": \"true\", \"policyExtendDTO\": {\"businessLine\": \"ob\"}, \"pid\": \"8000002081\", \"appPlanDTO\": [{\"payPeriod\": \"10\", \"sumIns\": \"100000\"}], \"tokenData\": \"". $token . "\", \"insurantDTO\": [{\"birth\": \"2016-04-22\", \"sex\": \"M\"}], \"policyDTO\": {\"paymentType\": \"2\"}, \"insurerDTO\": {\"mobile\": \"15890312027\"}}";
$headers = array('X-Custom-header:stuff','content-type:application/json');
$result = request($url,$body,$headers);
print_r($result);exit();
以下为java请求成功的代码:
private static void fluent() {
try {
String res = Request.Get("https://e.pingan.com/pa18shoplife/details/out/ob/qnyc-jynj/quote.jsp")
.addHeader("user-agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Mobile Safari/537.36")
.execute().returnContent().asString();
JXDocument document = JXDocument.create(Jsoup.parse(res));
List<JXNode> list = document.selN("//*[@id=\"tokenData\"]");
String url = "https://e.pingan.com/pa18shoplife/engine.ajax?flowId=&reqId=_details_out_ob_qnyc-jynj_quote_jsp_quoteReq4&WT.mc_id=mobi02-cdwl-s226-xqb";
String bodys = "{\"reflowId\": \"\", \"lifeDatas\": {\"mediaSource\": \"mobi02-cdwl-s226-xqb\", \"tbhuomian\": \"0\", \"yiliaobxj\": \"0\", \"jibingbx\": \"0\", \"jibingSums\": \"0\"}, \"createFlow\": \"true\", \"policyExtendDTO\": {\"businessLine\": \"ob\"}, \"pid\": \"8000002081\", \"appPlanDTO\": [{\"payPeriod\": \"10\", \"sumIns\": \"100000\"}], \"tokenData\": \""
+ list.get(0).asElement().attr("value") + "\", \"insurantDTO\": [{\"birth\": \"2016-04-22\", \"sex\": \"M\"}], \"policyDTO\": {\"paymentType\": \"2\"}, \"insurerDTO\": {\"mobile\": \"15890312027\"}}";
StringEntity stringEntity = new StringEntity(bodys, "utf-8");
String res2 = Request.Post(url)
.addHeader("X-Custom-header", "stuff")
.addHeader("content-type", "application/json")
.version(HttpVersion.HTTP_1_1)
.bodyString("Important stuff", ContentType.DEFAULT_TEXT)
.body(stringEntity)
.execute().returnContent().asString();
System.out.println("DD" + res2);
} catch (Exception e) {
e.printStackTrace();
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
个人对java不太了解,有没有大佬能看出php部分是有什么问题的
php 配置下这两个头试下