php curl post request

R. *_* 久蔵 0 php post curl request

我写了这段代码来发送帖子请求

$ch = curl_init("http://www.exemple.com");
curl_setopt($ch, CURLOPT_COOKIE, "PHPSESSID=32chars; prsess_******=32chars; login_******=55chars");
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("type" => "1"));
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: application/x-www-form-urlencoded; charset=UTF-8"));
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$page = curl_exec($ch);
print $head = curl_getinfo($ch, CURLINFO_HEADER_OUT);}
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)

但我把它作为标题

POST / HTTP/1.1
User-Agent: Mozilla/5.0 ...
Host: www.exemple.com
Accept: */*
Referer: http://www.exemple.com/page.php
Cookie: PHPSESSID=32chars; prsess_******=32chars; login_******=55chars
Content-Length: 140
Expect: 100-continue
Content-type: application/x-www-form-urlencoded; charset=UTF-8; boundary=----------------------------0636ec3c1d17
Run Code Online (Sandbox Code Playgroud)

有人能告诉我为什么type=1没有列出?

Arn*_*anc 6

POST变量在请求正文中发送,这不是标题的一部分.

请求的正文在标题之后发送,由空行分隔.

顺便提一下,当您将CURLOPT_POSTFIELDS设置为数组时,curl将主体作为multipart/form-data发送,并相应地将Content-Type设置为multipart/form-data.

您不应该Content-Type自己设置标头,因为它会中断请求.

或者将CURLOPT_POSTFIELDS设置为字符串(例如http_build_query(array('type' => 1));)以避免curl以多部分/表单数据的形式发送POST.