添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
可爱的牙膏  ·  How do I do this in ...·  4 小时前    · 
呐喊的竹笋  ·  netcore http post ...·  8 小时前    · 
阳刚的键盘  ·  [Bug]: OpenAI error: ...·  昨天    · 
发怒的小蝌蚪  ·  Mysql格式化转为日期·  2 月前    · 
打酱油的啄木鸟  ·  穿成Po文女配后, ...·  8 月前    · 
胆小的青椒  ·  ACG喵导航 | 全有导航·  10 月前    · 
潇洒的书签  ·  API — Flask ...·  1 年前    · 

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用PHP的curl方法post数据时通常使用以下方法:

$post_fields = ["aaa"=>"aaaa", "bbb"=>"bbbb"];
$url = "http://localhost/sandbox/PHPTest/output.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
echo $response;

$url为php页面时,该方法没有遇到问题,但$url为jsp页面时,出现post数据为空的情况,即在jsp页面用 request.getParameter("aaa") 得到的结果为null。尝试将$post_fields拼接为query字符串:

$post_fields = http_build_query($post_fields);

结果正确。
抓包对比直接post数组与post query字符串两种方法结果如下:

直接post数组

header

可见,直接post数组时,Content-type为 multipart/form-data ;而post query字符串时Content-type为 application/x-www-form-urlencoded

PHP手册中对CURLOPT_POSTFIELDS的说明如下:

全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1&para2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。