我试图取消这个网站https://www.machinemart.co.uk/,我需要添加一个产品到购物车以获得某些数据。该网站使用邮寄请求将产品添加到购物车。php curl + post + multipart/form-data + ASP.NET session
网址我试图添加的产品:https://www.machinemart.co.uk/p/clarke-amf-panel-for-kc6-and-kc10/
这里的标题和正文请求的例子:
Request Headers:
Host: www.machinemart.co.uk
Agent: Mozilla/5.0 (X11; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://www.machinemart.co.uk/p/clarke-amf-panel-for-kc6-and-kc10/
Content-Type: multipart/form-data; boundary=---------------------------209892343219764726031397980914
Content-Length: 1224
Cookie: ASP.NET_SessionId=f3p1y0ib1za3vch4exbue4l3;
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
-------------------------------------
Request Body
-----------------------------209892343219764726031397980914
Content-Disposition: form-data; name="__RequestVerificationToken"
2MpklOgIiis94EbGlIIoF5N_bzOrFegTpV_YEHTlZysKZrGxeAwBaFg5S4xtnGi8Jth5CEGRn9ETlK_g55jb6k9DcHGO-RR-LXug2roZEQg1
-----------------------------209892343219764726031397980914
Content-Disposition: form-data; name="ProductId"
4aaad9a5-ad65-4842-a24a-5f455b263933
-----------------------------209892343219764726031397980914
Content-Disposition: form-data; name="ProductSku"
010629550
-----------------------------209892343219764726031397980914
Content-Disposition: form-data; name="Quantity"
1
-----------------------------209892343219764726031397980914
Content-Disposition: form-data; name="SubmitButton"
Home delivery
-----------------------------209892343219764726031397980914
Content-Disposition: form-data; name="ufprt"
DA81438F81A7BE767B068EED46F4A4CAC24A05FC23BEAFE8B1A4B536FA6EC79AA5C17510979DB132CAC8C33C62E03A07E766C55C45DAE114A63B816F7CADEE9AB165197FBCF088E0FEBAAD9E6D8145291AB9984B8764A82C56C33D9D20394A22D1E148BF3EF97DC02EC48E5C4C491B3368B66B0A750BA6815B049A13F590BC8D6A6F05D3B96F81E0308742BD37D92E81
-----------------------------209892343219764726031397980914--
我能够获得每个产品所需要的数据(ID ,sku,令牌,ufp),并且我试图获取会话ID。这是代码:
$data = '---------------------------17064761399835087311752471201\r\nContent-Disposition: form-data; name=\"__RequestVerificationToken\"\r\n\r\n'.$request_dataToken.'\r\n---------------------------17064761399835087311752471201\r\nContent-Disposition: form-data; name=\"ProductId\"\r\n\r\n'.$request_dataProductId.'\r\n---------------------------17064761399835087311752471201\r\nContent-Disposition: form-data; name=\"ProductSku\"\r\n\r\n'.$request_dataProductSku.'\r\n---------------------------17064761399835087311752471201\r\nContent-Disposition: form-data; name=\"Quantity\"\r\n\r\n1\r\n---------------------------17064761399835087311752471201\r\nContent-Disposition: form-data; name=\"SubmitButton\"\r\n\r\nHome delivery\r\n---------------------------17064761399835087311752471201\r\nContent-Disposition: form-data; name=\"ufprt\"\r\n\r\n'.$request_dataUFPRT.'\r\n---------------------------17064761399835087311752471201';
//Get the session id
$session_id = '';
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $request_url);
curl_setopt($curl_handle, CURLOPT_POST, TRUE);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl_handle, CURLOPT_HEADER, 1);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($curl_handle);
// get cookies
$cookies = array();
preg_match_all('/Set-Cookie:(\s{0,}.*)$/im', $response, $cookies);
curl_close($curl_handle);
foreach ($cookies[1] as $cookie){
if(preg_match('/Id\=([a-z0-9]+)\;/', $cookie, $out)){
$session_id = $out[1];
}
}
//Try to add the product with the session id
$curl_handle = curl_init();
curl_setopt($curl_handle,CURLOPT_COOKIE,'ASP.NET_SessionId='.$session_id);
curl_setopt($curl_handle, CURLOPT_URL, $request_url);
curl_setopt($curl_handle, CURLOPT_POST, TRUE);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data);
// curl_setopt($curl_handle, CURLOPT_HEADER, 1);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($curl_handle);
curl_close($curl_handle);
//Get the cart page -- Actually empty returns
$curl_handle = curl_init();
curl_setopt($curl_handle,CURLOPT_COOKIE,'ASP.NET_SessionId='.$session_id);
curl_setopt($curl_handle, CURLOPT_URL, $request_urlCart);
//curl_setopt($curl_handle, CURLOPT_POST, TRUE);
//curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data);
//curl_setopt($curl_handle, CURLOPT_HEADER, 1);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($curl_handle);
curl_close($curl_handle);
print $response;
下面是变量$数据的输出的一个示例:
-------------------- ------- 17064761399835087311752471201 \ r \ n内容处理:表单数据;名= \ “__ RequestVerificationToken \” \ r \ n \ r \ nx9RTuiKcC0IJR0OwNFicu6XxPXoOt5dtgaXVEdQxpwRGGv52fdv7IJ9zcjkz1HnYaLX5yaz2e0pXCZFLi_judYwQLT - vCg2_xUMzsaT5Rc1 \ r \ n --------------------------- 17064761399835087311752471201 \ r \ n内容处理:表单数据;名= \ “产品编号\” \ r \ n \ r \ n4aaad9a5-ad65-4842-A24A-5f455b263933 \ r \ n ----------------------- ---- 17064761399835087311752471201 \ r \ n内容处理:表单数据;名= \ “ProductSku \” \ r \ n \ r \ n010629550 \ r \ n --------------------------- 17064761399835087311752471201 \ r \ nContent-Disposition:表单数据;名= \ “数量\” \ r \ n \ r \ N1 \ r \ n --------------------------- 17064761399835087311752471201 \ r \ nContent-Disposition:表单数据; name = \“SubmitButton \”\ r \ n \ r \ n送货上门\ r \ n --------------------------- 17064761399835087311752471201 \ r \ n内容处理:表单数据;名= \ “ufprt \” \ r \ n \ r \ nF5CA6BAC0C5C12E3B885CE69FE5E0D24480EA23E895AD3DA72BFDF6832B56CD8A70F1183BFA03F61AD353FA86DCDD71CA105A86A0274A27152E68A66449191BD8167B6E06A2982B326BBC1E47C7C9AB3984A7BB17ECB9E153496542F7DE8B00D97FEFAE8B6120A6C3B87CAA74E875E68BE894586468FD0704B11346A6E1BC902BC538D64CA23DD87068DCA52CC5AC19F \ r \ n --------------------------- 17064761399835087311752471201
我试着添加标题来请求,发送参数作为数组......但仍然不起作用,我做的不好?