PHP curl请求奇怪的参数

时间:2018-03-04 10:03:58

标签: php curl

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

1 个答案:

答案 0 :(得分:3)

当你把它放入CURLOPT_POSTFIELDS时,你将它放入请求体,而不是请求URL。此外,当您为CURLOPT_POSTFIELDS提供一个数组时,curl将以import cv2 img = cv2.imread('xyz.png') t = img.shape print(t) component = 2 img.itemset((0,0,component),int(r[0])) img.itemset((0,t[1]-1,component),int(r[1])) img.itemset((t[0]-1,0,component),int(r[2])) img.itemset((t[0]-1,t[1]-1,component),int(r[3])) print(img.item(0,0,component)) print(img.item(0,t[1]-1,component)) print(img.item(t[0]-1,0,component)) print(img.item(t[0]-1,t[1]-1,component)) cv2.imwrite('output.png',img) - 格式对其进行编码,但您需要它urlencoded(与multipart / form-data不同)。删除所有POST代码,并使用http_build_query构建网址

multipart/form-data

和protip,您可以使用parse_str()将URL解码为php数组,此外,您可以使用var_export获取有效的PHP代码以在运行时创建该数组,最后,如上所示,您可以使用http_build_query来将该数组转换回网址that's what i did here.