ホームページ >バックエンド開発 >PHPチュートリアル >CURL POST データの使用に関する問題

CURL POST データの使用に関する問題

WBOY
WBOYオリジナル
2016-06-13 13:32:39988ブラウズ

データの投稿にcurlを使用する問題
最近非常に奇妙な問題に遭遇しました
投稿リクエストを送信するとき、POSTFIELDSの型が文字列の場合はタイムアウトになりますが、型が配列の場合は問題ありません。

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
// 数据为string类型时,超时;
// 如果是array('param' => $data_string)就没问题。
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_exec($ch);
curl_close($ch);



------解決策------ -
CURLOPT_POSTFIELDS に配列を渡すと、cURL はデータを multipart/form-data にエンコードしますが、URL エンコードされた文字列を渡すと、データは application/x-www-form-urlencoded にエンコードされます。 。
これが唯一の違いであり、タイムアウトはネットワーク要因であり、コードとは関係ないと思います。
さらに、TIMEOUT 設定は確かに少し小さいのが一般的です。発生。
------解決策---------
文字列は何ですか?
------解決策------------------
オンラインでいくつかの例を探し、使用されているかどうかを確認してください。 間違っている。すべてが正しい場合、それは他の理由によって引き起こされているということだけを意味します

http://hi.baidu.com/chenxiandong1988/blog/item/56f3b0282bd0fde6e7cd4087.html
------解決策----------------------
あなたのコードを使用してローカルで試しましたが、問題ありませんでしたが見つかりました。
PHP コード
$data_string = "ispost=ok&msg=post";
$data = array("ispost"=>"ok","msg"=>"post");
$ch =curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/my/www/getdata.php");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$result =curl_exec($ch);
カール_クローズ($ch);
エコー $結果<div class="clear"></div>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。