質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
kintone

kintone(キントーン)とは、サイボウズ社が提供する業務改善プラットフォームです。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

0回答

1376閲覧

HerokuでGuzzleを使用してProximo経由でkintone APIに接続する方法がわからない

t-yknow

総合スコア4

kintone

kintone(キントーン)とは、サイボウズ社が提供する業務改善プラットフォームです。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/08/23 05:09

編集2021/08/23 07:12

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()); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問