如何通过php中的curl发送请求有效负载

时间:2018-05-25 12:26:54

标签: javascript php web-services curl web-scraping

我在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方法,但我不确定。

2 个答案:

答案 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"));