フリーなんす

フリーランスエンジニアの色々

curlでPOST

API開発してて、curlでPOSTリクエスト投げるとかまぁよくある場面なんですが、前にもハマって、最近またハマったんでもう忘れないように備忘録。

phpから

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);

$result = curl_exec($ch);

curl_close($ch);

まぁ普通にPOSTしてるんですが、API側でパラメータが取れない。。。

コマンドラインから、

curl http://localhost/ -d 'foo=bar&hoge=50'

って送信すると正しくパラメータが取れる。。。

え〜なんだこれ〜と思って色々ググってたら、以前同じようなことでハマった時に見たことあるブログに行き着いた。あぁそういえばこんなことあったな。。

 

phpのcurlでPOSTする時は、http_build_queryするといいかもしれない。

http://saya.hateblo.jp/entry/2013/04/17/234245 

 

ありがとうございます。ほんとありがとうございます泣

2回も助けられることになるとは。。。

 

 http_build_queryすれば無事解決!!!

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postdata));

$result = curl_exec($ch);

curl_close($ch);