我正在尝试自动注册课程(因为我总是忘记这样做)当我手动注册时,它会在特定日期使用此URL进行课程:
https://URL.com/public/tickets.php?PRESET%5BTickets%5D%5Bname%5D%5B%5D=&PRESET%5BTickets%5D%5Bday%5D%5B%5D=2018-03-04
它解码成了
https://URL.com/public/tickets.php?PRESET[Tickets][name][]=&PRESET[Tickets][day][]=2018-03-04
但我正在努力将其转化为卷曲请求。我(除其他外)尝试过
$data = array("PRESET" => array("Tickets" => array("name"=>array(""), "day"=> array("2018-03-02"))));
和
$data = array('PRESET[Tickets][naam][]=', 'PRESET[Tickets][naam][]=');
但我总是得到一个没有选择日期的页面。有时在页面上有一个关于参数的php错误,该参数应该是一个数组。
这是我的卷曲请求
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_URL, $targetSite);
curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookie);
curl_setopt($curl, CURLOPT_COOKIEJAR, $this->cookie);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
有人能告诉我如何使用curl请求正确发送参数吗?谢谢!
当你把它放入CURLOPT_POSTFIELDS时,你将它放入请求体,而不是请求URL。此外,当您为CURLOPT_POSTFIELDS提供一个数组时,curl将以multipart/form-data
格式对其进行编码,但您需要它urlencoded(这与multipart / form-data不同)。删除所有POST代码,并使用http_build_query构建网址,
curl_setopt ( $ch, CURLOPT_URL, "https://URL.com/public/tickets.php?" . http_build_query ( array (
'PRESET' => array (
'Tickets' => array (
'name' => array (
0 => ''
),
'day' => array (
0 => '2018-03-04'
)
)
)
) ) );
和protip一样,你可以使用parse_str()将url解码成php数组,而且,你可以使用var_export来获取有效的php代码来在运行时创建该数组,最后,如上所示,你可以使用http_build_query来转换那个数组回到网址,that's what i did here.