我在php中使用curl登录danamon bank。我登录但后来我尝试使用json编码在json中发布请求有效负载,如下所示 -
$data = [
'__EVENTTARGET' => $eventTarget,
'__EVENTARGUMENT' => $eventArgument,
'__LASTFOCUS' => '',
'__VIEWSTATE' => $__VIEWSTATE,
'hdnActionCd' => '',
'hdnRandomKey' => '',
'hdnWUC' => 'AcctMgmt/am_AcctSummaryNew_lst',
'hdnLanguage' => $hdnLanguage,
'hdnPortlet' => '',
'Portlet1:hdnFunctionId' => '',
'_ctl0:_ctl8:ddlExRate' => '1'
];
$data = json_encode($data);
但正如我在浏览器工具中看到的那样,他们发送了这样的内容 -
usercontrol: AcctMgmt/am_AcctSummaryNew_lst
------WebKitFormBoundaryH03FR3sFh5RDMJKt
Content-Disposition: form-data; name="__EVENTTARGET"
_ctl0:_ctl2
------WebKitFormBoundaryH03FR3sFh5RDMJKt
Content-Disposition: form-data; name="__EVENTARGUMENT"
09732747-7aad-42cc-94d7-1a77d3413656^003597205313^26^TABUNGAN DANAMON LEBIH^IDR^SA_N422
------WebKitFormBoundaryH03FR3sFh5RDMJKt--
我不确定他们是如何将这些信息发送到服务器的。 我认为他们在文件中使用put方法,但我不确定。
答案 0 :(得分:1)
我找到了问题的答案。
如果你想在curl中发送请求有效负载,那么应该使用json格式发布数据添加curl header -
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type:multipart/form-data"
));
在帖子中你需要添加 -
curl_setopt($ch, CURLOPT_POSTFIELDS, '@'.$data);
答案 1 :(得分:0)
这解决了我的问题
在curl的postfields选项中以JSON格式写入有效载荷
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"key1":"value1","key2":"value2"}');
并在curl的httpheader选项中指定内容类型(可以在请求的请求标头中找到)
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));