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リクエストのメッセージボディをクリアにしてもいいと思います。