HTTP_Request2で$postParamsをクリアするには
少し戸惑ったのでメモ。
PEARのHTTP_Request2(http://pear.php.net/package/HTTP_Request2/)を使ってPOSTを送信しながらいくつかのページを読み込んで行く、というコードを書いていました。
HTTP_Request2のインスタンスを一つ作って、addPostParameter()でページ遷移に必要となるパラメータを次々入れていき、setUrl()でページを読み込んで行ったのですが、ページ遷移後に$postParamsをクリアする事を忘れていました。
お陰でHTTPリクエストのメッセージボディがページ遷移するするたびに増えてしまい、
本来必要ないはずのPOSTのデータが残っていてバグの原因となっていました。
一度addした$postParamsを消せば良いのですが、HTTP_Request2で$postParamsを直接扱う関数はaddPostParamater()のみです。HTTP_RequestにはclearPostData( )という関数があったようなのですが・・・
結論としては、addPostParameter()にフィールド名を指定し、値にnullを入れて消さなければならないようです。
公式Documentationによると
addPostParameter( string|array $name, [mixed $value = null])
とう定義で、デフォルトの$valueがnullになっているので特定のフィールドのPOSTデータを消したい時には
addPostParameter($field_name);
とすればいいわけです。addって名乗ってるのに!!
これじゃあまりにも読めないコードなので
addPostParameter(array($field_name => null));
が分かりやすいかな。それでもaddだけど。setならまだいいのに・・・
もう一つの解決法として、特定のフィールドだけ消したいのではなく、全部の$postParamsを消したい時には
setBody("");
として、HTTPリクエストのメッセージボディをクリアにしてもいいと思います。