请教一个PHP CURL的POST提交遇到的问题
这两天在学习搜狐的sendCloud平台,遇到一个问题。
有一个接口:
官方给的文档是这样的:
1 | <br />* 请求接口(建议使用post请求,注意不要使用multipart-post):<br />/list.create<br />* 参数说明:<br />参数 类型 是否必须 说明 描述<br />api_user string 是 请求SC认证账号<br />api_key string 是 请求 SC认证密码<br />addres sstring 是 列表别称地址 例如:[email protected] Developers<br />name string 是 列表名称 不能大于16个中文字<br />description string 否 列表描述 不能大于85个中文字符<br />
|
로그인 후 복사
于是,我在命令行输入这样:
1 | <br />curl -d "api_user=*&api_key=*&[email protected]&name=demo&description=this is a demo list" https://sendcloud.sohu.com/webapi/list.create.json<br />
|
로그인 후 복사
提交正确,创建了一个邮件列表。
尝试构造表单提交,同样提交正确
1 | < br /> < form method = "post" action = "https://sendcloud.sohu.com/webapi/list.create.json" >< br /> < input type = "text" name = "api_user" value = "×" />< br />< br /> < input type = "text" name = "api_key" value = "×" />< br />< br /> < input type = "text" name = "address" value = "[email protected]" />< br />< br /> < input type = "text" name = "name" value = "Abao建立的测试邮件列表" />< br />< br /> < input type = "text" name = "description" value = "这是Abao建立的一个测试邮件列表" />< br />< br /> < input type = "submit" value = "submit" />< br /> </ form >< br />
|
로그인 후 복사
但是,用PHP CURL提交,就出了问题,代码如下:
1 | <br /><?php<br /> header( 'Content-Type:text/html;charset=utf-8' );<br /> $ch = curl_init();<br /> curl_setopt( $ch , CURLOPT_HTTPAUTH, CURLAUTH_BASIC);<br /> curl_setopt( $ch , CURLOPT_URL, 'https://sendcloud.sohu.com/webapi/list.create.json' );<br /> curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, false);<br /> curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, false);<br /> curl_setopt( $ch , CURLOPT_AUTOREFERER, 1);<br /> curl_setopt( $ch , CURLOPT_POST, 1);<br /> curl_setopt( $ch , CURLOPT_HEADER, 0);<br /> curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);<br /> $data = array (<br /> 'api_user' => '*' ,<br /> 'api_key' => '*' ,<br /> 'address' => [email  protected ] ',<br /> ' name ' => ' Abao新建的测试邮件列表 ',<br /> ' description ' => ' 这是Abao新建的测试邮件列表 ',<br /> );<br /> curl_setopt($ch,CURLOPT_POSTFIELDS,$data);<br /> curl_setopt($ch,CURLOPT_POSTFIELDS,$data);<br /> if(false === $result=curl_exec($ch)) {<br /> echo ' false:<br />';<br /> }<br /> var_dump(json_decode( $result ,true));<br /> curl_close( $ch );<br />
|
로그인 후 복사
这时候总是返回 bad username/password,如果直接在浏览器打开接口的url也是现实bad username/password。
所以我猜测是数据没有提交上去。
百度了说设置curl_setopt($ch,CURLOPT_VERIFYHOST,true),但我一设置就报错
1 | <br />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<br />
|
로그인 후 복사
更加奇怪的是用同样的代码,调用/mail.send.json也就是发送邮件的接口,却能够正常提交。
请各位帮忙看看,十分感谢!
------解决思路----------------------输出curl_error()和curl_errno看看?
------解决思路----------------------你的表单得到
{"message":"error","errors":["Bad username / password!"]}
你的 php 代码得到
array(2) { ["message"]=> string(5) "error" ["errors"]=> array(1) { [0]=> string(24) "Bad username / password!" } }
你没有给出正确的用户名和口令,自然不能得到正确的结果