我试图用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);
而在表单帖子中,两者 id
和 EMA0
作为参数出现,而在cURL帖子中 id
作为参数出现,而 EMA0
显示为Multipart Value。
我是否向cURL提供了正确的头信息?
我的cURL代码中是否有其他错误?
谢谢你
基于Curl 文件 关于 CURLOPT_POSTFIELDS:
该参数可以以urlencoded字符串的形式传递,如'para1=val1¶2=val2&...',也可以以数组的形式传递,以字段名作为键,以字段数据作为值。如果value是一个数组,Content-Type头将被设置为multipartform-data。
所以,你应该将post字段以字符串的形式传递(可能是通过使用 http_build_query 函数),以拥有 applicationx-www-form-urlencoded 内容类型。
因此不需要设置头部,而只需要。
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['EMA0'=>1]));