请教一个PHP CURL的POST提交遇到的问题

RunnerLeer 2015-03-04 02:18:30
这两天在学习搜狐的sendCloud平台,遇到一个问题。

有一个接口:
https://sendcloud.sohu.com/webapi/list.create.json


官方给的文档是这样的:

* 请求接口(建议使用post请求,注意不要使用multipart-post):
/list.create
* 参数说明:
参数 类型 是否必须 说明 描述
api_user string 是 请求SC认证账号
api_key string 是 请求 SC认证密码
addres sstring 是 列表别称地址 例如:developers@sendcloud.org或者 Developers
name string 是 列表名称 不能大于16个中文字
description string 否 列表描述 不能大于85个中文字符


于是,我在命令行输入这样:

curl -d "api_user=*&api_key=*&address=runnerleer@maillist.sendcloud.org&name=demo&description=this is a demo list" https://sendcloud.sohu.com/webapi/list.create.json

提交正确,创建了一个邮件列表。

尝试构造表单提交,同样提交正确

<form method="post" action="https://sendcloud.sohu.com/webapi/list.create.json">
<input type="text" name="api_user" value="×" /><br />
<input type="text" name="api_key" value="×" /><br />
<input type="text" name="address" value="runnerlee@maillit.sendcloud.org" /><br />
<input type="text" name="name" value="Abao建立的测试邮件列表" /><br />
<input type="text" name="description" value="这是Abao建立的一个测试邮件列表" /><br />
<input type="submit" value="submit" />
</form>


但是,用PHP CURL提交,就出了问题,代码如下:

<?php
header('Content-Type:text/html;charset=utf-8');
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_URL, 'https://sendcloud.sohu.com/webapi/list.create.json');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = array(
'api_user' => '*',
'api_key' => '*',
'address' => 'runnerlee@maillist.sendcloud.org',
'name' => 'Abao新建的测试邮件列表',
'description' => '这是Abao新建的测试邮件列表',
);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
if(false === $result=curl_exec($ch)) {
echo 'false:<br />';
}
var_dump(json_decode($result,true));
curl_close($ch);

这时候总是返回 bad username/password,如果直接在浏览器打开接口的url也是现实bad username/password。
所以我猜测是数据没有提交上去。

百度了说设置curl_setopt($ch,CURLOPT_VERIFYHOST,true),但我一设置就报错

Notice: curl_setopt(): CURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used instead in F:\www\sendCloud\demo.php on line 13


更加奇怪的是用同样的代码,调用/mail.send.json也就是发送邮件的接口,却能够正常提交。

请各位帮忙看看,十分感谢!

...全文
254 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
RunnerLeer 2015-03-04
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
你的表单得到 {"message":"error","errors":["Bad username / password!"]} 你的 php 代码得到 array(2) { ["message"]=> string(5) "error" ["errors"]=> array(1) { [0]=> string(24) "Bad username / password!" } } 你没有给出正确的用户名和口令,自然不能得到正确的结果
用户名和口令是正确的,只是发出来的时候打码了哈。 问题已经找到原因了,$data为数组的时候,content-type就自动转为multipart/form-data了,但是这个接口不接受multipart/form-data,才出现了这样的问题。 谢谢二位!
xuzuning 2015-03-04
  • 打赏
  • 举报
回复
你的表单得到 {"message":"error","errors":["Bad username / password!"]} 你的 php 代码得到 array(2) { ["message"]=> string(5) "error" ["errors"]=> array(1) { [0]=> string(24) "Bad username / password!" } } 你没有给出正确的用户名和口令,自然不能得到正确的结果
tottyandbaty 2015-03-04
  • 打赏
  • 举报
回复
输出curl_error()和curl_errno看看?

21,889

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧