PHP curl请求奇怪的参数

问题描述 投票:4回答:1

我正在尝试自动注册课程(因为我总是忘记这样做)当我手动注册时,它会在特定日期使用此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请求正确发送参数吗?谢谢!

php curl
1个回答
3
投票

当你把它放入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.

© www.soinside.com 2019 - 2024. All rights reserved.