ホームページ  >  記事  >  バックエンド開発  >  PHP CURL POST 送信時に発生した問題について教えてください。

PHP CURL POST 送信時に発生した問題について教えてください。

WBOY
WBOYオリジナル
2016-06-23 13:39:11947ブラウズ

過去 2 日間、捜狐の 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或者 Developersname  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="&times;" /><br />        <input type="text" name="api_key" value="&times;" /><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);

このとき、常に不正なユーザー名/パスワードが返されます。ブラウザでインターフェイスを直接開いた場合、URL もユーザー名/パスワードが間違っています。
ということは、データが提出されていなかったのだと思います。

Baidu では、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 を呼び出していることです。メール送信インターフェースである が動作しない 正常に送信できます。

ぜひご覧ください、ありがとうございます!


ディスカッション (解決策) への返信

curl_error() とcurl_errno の出力を見てみましょう。

フォームは
{"message":"error","errors":["Bad username/password!"]} を取得します

php コードは
array(2) { ["message"]=> ; を取得します(5) "error" ["errors"]=> array(1) { [0]=> string(24) "ユーザー名 / パスワードが間違っています!"

正しいユーザー名とパスワードを入力しませんでした。当然、正しい結果は得られません

あなたのフォームは
{"message":"error","errors":["Bad username/password!"]} を取得します

あなたの php コードは
array(2 ) { [ "メッセージ"]=> 文字列(5) "エラー" ["エラー"]=> 配列(1) { [0]=> 文字列(24) "ユーザー名/パスワードが間違っています!"正しいユーザー名とパスワードを入力しなかった場合、当然ながら正しい結果を得ることができません

ユーザー名とパスワードは正しいですが、送信時に暗号化されています。

$data が配列の場合、content-type は multipart/form-data に自動的に変換されますが、このインターフェイスは multipart/form-data を受け入れないため、この問題が発生します。

お二人ともありがとうございました!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。