用php cURL模拟表单POST,头文件被忽略?

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

我试图用PHP cURL向ymlp.com发送一个通讯注册请求

一个html表格可以很好地使用这段代码(我使用ptsv2.com来测试POSTing)。

<form method="post" action="http://ptsv2.com/t/stacktest/post?id=abcdefghijk">
  <input class="text" size="20" name="EMA0" type="text" placeholder="Type your email..." />
  <input class="submit" value="Subscribe to Newsletter" type="submit" />
</form>

所以我试着在PHP cURL请求中模仿这段代码,使用以下代码。

<?php
$cURLConnection = curl_init('http://ptsv2.com/t/stacktest/post?id=abcdefghijk');
curl_setopt($cURLConnection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cURLConnection, CURLINFO_HEADER_OUT, true);    
curl_setopt($cURLConnection, CURLOPT_POST, true);
curl_setopt($cURLConnection, CURLOPT_POSTFIELDS, ['EMA0' => '[email protected]']);
curl_setopt($cURLConnection, CURLOPT_HTTPHEADER, array('application/x-www-form-urlencoded'));
$response = curl_exec($cURLConnection);
curl_close($cURLConnection);

而在表单帖子中,两者 idEMA0 作为参数出现,而在cURL帖子中 id 作为参数出现,而 EMA0 显示为Multipart Value。

我是否向cURL提供了正确的头信息?

我的cURL代码中是否有其他错误?

谢谢你

php curl post
1个回答
1
投票

基于Curl 文件 关于 CURLOPT_POSTFIELDS:

该参数可以以urlencoded字符串的形式传递,如'para1=val1&para2=val2&...',也可以以数组的形式传递,以字段名作为键,以字段数据作为值。如果value是一个数组,Content-Type头将被设置为multipartform-data。

所以,你应该将post字段以字符串的形式传递(可能是通过使用 http_build_query 函数),以拥有 applicationx-www-form-urlencoded 内容类型。

因此不需要设置头部,而只需要。

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['EMA0'=>1]));
© www.soinside.com 2019 - 2024. All rights reserved.