Skip to main content
November 30, 2017

RESTAPI associateLead cookie登録でBad Requestになってしまいます。

  • November 30, 2017
  • 1 reply
  • 88 views

初めまして。

ネットオンの下村と申します。

RESTAPIについて、技術的な質問です。

導入したばかりなのでトンチンカンな質問をしてしまっているかも知れませんがご容赦ください。


以前読んだ記事(REST API で任意のカスタムフィールドにCVと同時にクッキーを紐づけ、過去行動も含めてMarketoに送信したい )に

AssosiateLeadで紐付けないと、過去分が取得できないとのことが書いていましたので、

弊社サイトからRESTAPI(Lead)を経由して顧客を登録し、

その戻り値のIDとCookieをRESTAPI(Associate Lead)でUPDATEする処理を実装しているのですが、

Associate Leadの方の処理を通すと、nginxの400 Bad Requestとなり、Cookieの登録が出来ません。

windows http環境でアクセスすると問題なくCookieが保存され、過去の履歴まで参照が出来るのですが、

Linux https環境でアクセスするとCookieの保存ができません。

アクセスできる環境とそうでない環境があることと

エラーコード等が返ってくるなら対処もできるのですが、BadRequestだと

どうしていいのかわからずです。

どなたか同じ現象でハマったとか、こうすればいいよ。等、

アドバイスをいただけませんでしょうか。

◆環境◆

【正常動作】

Windows7 apache PHP HTTP通信

【Cookie取得不可】

Linux apache PHP HTTPS通信

追記)

Bad Requestは、Cookieが壊れていると出ることもあるそうなので、

_mkto_trk のCookieを削除して、再生成して再アクセスしてみましたがダメでした。

メッセージ編集者: 下村 智英

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

1 reply

December 1, 2017

自己解決?しました。

AssosiateLeadをCURLで呼び出す際のパラメータが足りていなかったようです。

Gitに落ちていたサンプルソースは

$ch = curl_init($url);

curl_setopt($ch,  CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_HTTPHEADER, array('accept: application/json','Content-Type: application/json'));

$response = curl_exec($ch);

となっていたのですが、調べてみるとCURLは

CURLOPT_POSTFIELDS を指定しないと Content-Length: -1 になります。これを Bad Request とする仕様であると言う事みたいです。

なので、上記ソースを追加し、

$ch = curl_init($url);

curl_setopt($ch,  CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, "");

curl_setopt($ch, CURLOPT_HTTPHEADER, array('accept: application/json','Content-Type: application/json'));

$response = curl_exec($ch);

とすると、動きました。

なぜWindows環境で動いていたのかはまだ不明ですが、Linux環境でも過去分が取得できるようになりましたので、ひとまずは解決とします。