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

问题描述 投票:2回答:2

我在php中使用curl登录danamon银行。我登录但后来我尝试使用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方法,但我不确定。

javascript php web-services curl web-scraping
2个回答
1
投票

我找到了回答我的问题。

如果你想在curl中发送请求有效载荷,那么应该使用json格式发布数据添加curl header -

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      "Content-Type:multipart/form-data"
    ));

在帖子中你需要添加 -

curl_setopt($ch, CURLOPT_POSTFIELDS, '@'.$data);

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"));
© www.soinside.com 2019 - 2024. All rights reserved.