为了账号安全,请及时绑定邮箱和手机立即绑定

使用 php cURL 模拟 POST 表单,标题被忽略?

使用 php cURL 模拟 POST 表单,标题被忽略?

PHP
素胚勾勒不出你 2023-03-04 16:43:14
我正在尝试使用 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' => 'deleteme@gmail.com']);curl_setopt($cURLConnection, CURLOPT_HTTPHEADER, array('application/x-www-form-urlencoded'));$response = curl_exec($cURLConnection);curl_close($cURLConnection);收到请求,但 html 表单的帖子内容类型显示为“application/x-www-form-urlencoded”,而 cURL 帖子内容类型为“multipart/form-data”;边界=------------------------b9f916145e7d51d3'。并且在表单中发布两者id并EMA0显示为参数,而在 cURL 中id发布显示为参数,同时EMA0显示为多部分值。我是否正确地向 cURL 提供了标头?我的 cURL 代码中还有其他错误吗?
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

基于有关CURLOPT_POSTFIELDS的 Curl

此参数可以作为 urlencoded 字符串传递,如“para1=val1¶2=val2&...”,也可以作为以字段名称作为键、字段数据作为值的数组传递。如果值是一个数组,则 Content-Type 标头将设置为 multipart/form-data。

因此,您应该将帖子字段作为字符串传递(可能通过使用http_build_query函数)以获得application/x-www-form-urlencoded内容类型。

因此无需设置标题,而只需:

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['EMA0'=>1]));


查看完整回答
反对 回复 2023-03-04
  • 1 回答
  • 0 关注
  • 66 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信