Guzzleを利用して外部のAPIに接続して情報取得や登録、更新などを行うバッチをlaravelで作りherokuにアップしました。API接続先のkintoneでIPを許可してアクセスする必要があるためProximoを使ってherokuのIPを固定化しました。が、問題はそこからでProxi経由の接続が上手くいきません。どうかお力を貸していただけませんでしょうか。
データ取得のためにqueryをURLのパラメータとして付けています。公式ドキュメントにはヘッダのオプションにつける方法が書いてありますが、うまく動作せず、パラメータで送る方法に至りました。
【試したこと1】
以下のように、参考サイトの通りにProximoの固定IPが返ってくるのか試してみるところから始めたところ、kintoneからは500エラーが返ってきてしまい、先に進めそうにないです。
参考サイト
public function GetData ($query) { //env('PROXIMO_URL')はheroku環境変数に自動的に追加されたURLをそのまま使っています $proxy_url = env('PROXIMO_URL') . ':80'; $client = new \GuzzleHttp\Client([ 'http_errors' => false ]); try{ $res = $client->request('GET', 'http://ip.jsontest.com/',[ [ 'proxy' => $proxy_url ] ]); if($res->getStatusCode() == 200){ $list = json_decode($res->getBody()->getContents(), true); print_r($list);exit(); return $list['records']; }else{ $list = json_decode($res->getBody()->getContents(), true); if ($list) { $response['kintoneError'] = $list; $this->log("kintoneError error:".print_r($response, true));exit(); }else{ $response['kintoneError'] = $res->getStatusCode(); $this->log("kintoneError error:".print_r($response, true));exit(); } //\Log::info('kintoneError:'.print_r($response)); } } catch (Exception $e){ $this->log("kintoneError error:" . print_r(json_decode($e->getResponse()->getBody()->getContents()))); $this->log("kintoneError error:" . print_r($e->getMessage())); die($e->getMessage()); } }
【試したこと2】
公式ドキュメントにはこのような↓ことが書かれておりまました。こちらを参考に試してみましたが、403エラーになってしまいました。usernameとpasswordにはkitnoneのものを使えば良いかと考えましたが間違っているのでしょうか。proximoが発行したURLのproxy:passwordはどう扱えば良いのかもわかりません。
You can provide proxy URLs that contain a scheme, username, and password. For example, "http://username:password@192.168.16.1:10".
試したソース
public function GetData ($query) { // インスタンス作成 $client = new Client(); $options = [ // Basic認証 'auth' => ['kintoneUser', 'Password'], // プロキシ設定 'proxy' => 'http://proxy:xxxxxxx@proxy-xxx-xxx-xxx-xxx.proximo.io' . ':80', // SSL証明書を検証しない 'verify' => false, ]; // リクエスト送信 $response = $client->request('GET', 'https://208gxyhcxfg3.cybozu.com/k/v1/record.json?app=337&id=58412', $options); print_r($res->getStatusCode());exit(); }
【やりたいこと】
最終的には以下の内容をproxi経由でGET送信とPOST送信したいのですがどう書けば良いか変わりません。
そうかご教授お願い致します。
//GET送信 public function GetData ($query) { $query = urlencode($query); $url = $this->KINTONE_API_URL."?app=".$this->APP_ID_BRANCH."&totalCount=true&query=".$query; $client = new \GuzzleHttp\Client([ 'http_errors' => false ]); try{ $res = $client->request('GET', $url,[ 'headers' => [ 'X-Cybozu-API-Token' => $this->KINTONE_API_TOKEN_BRANCH ], //'query' => ['xxx' => 'xxxx'], ]); if($res->getStatusCode() == 200){ $list = json_decode($res->getBody()->getContents(), true); return $list['records']; }else{ $list = json_decode($res->getBody()->getContents(), true); if ($list) { $response['kintoneError'] = $list; $this->log("kintoneError error:".print_r($response, true));exit(); }else{ $response['kintoneError'] = $res->getStatusCode(); $this->log("kintoneError error:".print_r($response, true));exit(); } } } catch (Exception $e){ $this->log("kintoneError error:" . print_r(json_decode($e->getResponse()->getBody()->getContents()))); $this->log("kintoneError error:" . print_r($e->getMessage())); } } //POST送信 public function Post ($records) { $body = [ 'app' => $this->APP_ID_COMPANY, 'records' => $records ]; $client = new \GuzzleHttp\Client([ 'http_errors' => false ]); try{ $res = $client->request('POST', $this->KINTONE_API_URL,[ 'headers' => [ 'X-Cybozu-API-Token' => $this->KINTONE_API_TOKEN_COMPANY ], 'json' => $body ]); if($res->getStatusCode() == 200){ $this->log("PostCompany success:".count($records).' records'); }else{ $list = json_decode($res->getBody()->getContents(), true); if ($list) { $response['kintoneError'] = $list; $this->log("kintoneError error:".print_r($response, true)); exit(); }else{ $response['kintoneError'] = $res->getStatusCode(); $this->log("kintoneError error:".print_r($response, true));exit(); } } } catch (Exception $e){ $this->log("kintoneError error:" . print_r(json_decode($e->getResponse()->getBody()->getContents()))); $this->log("kintoneError error:" .$e->getMessage()); } }
あなたの回答
tips
プレビュー