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

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

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

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

6297閲覧

PHPのcurlを使ってサーバーにjson形式でPOSTしたい

uber

総合スコア11

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2015/09/26 04:40

編集2016/01/14 09:55

いつもお世話になっております。
一週間悩んで解決しなかったので、質問致しました。
実装したいことは、
PHPからRuby on Railsのサーバーにログイン情報をPOSTで送って、
その際にCookieの情報を一時的ファイルに書き込み、
json形式でサーバーにPOSTすることです。

エラー文(PHP側):HTTP/1.1 500 Internal Server Error Date: Sat, 26 Sep 2015 04:24:51 GMT Status: 500 Internal Server Error Connection: close Content-Type: text/html; charset=utf-8 Content-Length: 23214 X-Request-Id: 19fbbbb6045a8727ae3122ff31d1da82 X-Runtime: 2.062326
エラー文(Rails側):TypeError in EditorController#〜
can't convert nil into String

送っているjson形式に問題が無い(少なくとも形は)、URLに問題が無いことは確認しております。
PHPからのPOST通信がうまくいっていないのだと思いますが、原因が分かりません。
最初のログインでのPOST通信は、正常に行われています。
具体的なコードは以下のようになっています。

PHP

1//ログイン 2//Cookie保存用のtempファイルを作成 3$tmp_path = tempnam(sys_get_temp_dir(), "PRE"); 4//postするデータの配列 5$account_data = array('login_id' => $login_id ,'login_password'=>$login_password); 6$url = "http://~ログイン用URL"; 7$ch = curl_init(); // はじめ 8curl_setopt($ch, CURLOPT_URL, $url); 9curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 10//POST送信 11curl_setopt($ch,CURLOPT_POST, true); 12curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($account_data)); 13//Cookie受信 14//cookieオプション 15curl_setopt($ch,CURLOPT_COOKIEFILE,$tmp_path); 16curl_setopt($ch, CURLOPT_COOKIEJAR, $tmp_path); 17$html=curl_exec($ch);//実行 18curl_close($ch); //終了 19$pre_data=json_decode($html); 20$token=$pre_data->session->_csrf_token; 21echo 'token:'.$token.'<br>';//正常に出力されます 22echo 'tmp_pass:'.$tmp_path.'<br>';//正常に出力されます 23$url = "http:// データアップロード用"; 24$data=//省略していますが、連想配列でデータを格納 25$header = [ 26 'Authorization: Bearer '.$token, 27 'Content-Type: application/json', 28]; 29$ch = curl_init(); // はじめ 30curl_setopt($ch, CURLOPT_URL, $url); 31curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 32//curl_setopt($ch,CURLOPT_POST, true); 33//Cookie送信 34//cookieオプション 35curl_setopt($ch,CURLOPT_COOKIEFILE,$tmp_path); 36curl_setopt($ch, CURLOPT_COOKIEJAR, $tmp_path); 37$json_data=json_encode( $data , JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES ); 38echo $json_data;//json形式で正常に出力されています 39echo '<br>'; 40curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 41curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); 42curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 43curl_setopt($ch, CURLOPT_HEADER, true); 44$result = curl_exec($ch);//実行 45echo $result.'<br>';//Rails側の can't convert nil into Stringエラー 46curl_close($ch); 47

解決したいことは、
エラー文(PHP側):HTTP/1.1 500 Internal Server Error Date: Sat, 26 Sep 2015 04:24:51 GMT Status: 500 Internal Server Error Connection: close Content-Type: text/html; charset=utf-8 Content-Length: 23214 X-Request-Id: 19fbbbb6045a8727ae3122ff31d1da82 X-Runtime: 2.062326
です。
何かわかる方いらっしゃいましたら、ご教示下さい。
よろしくお願いいたします。

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

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

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

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

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

Brownie

2015/09/29 23:57

補足をお願いします。
ikuwow

2015/12/03 22:21

他のユーザから「不正な編集がされた質問」という指摘をうけました 投稿していただいた質問は、後に他の誰かが困ったときに助けになる情報資産になります。 他のユーザにも質問内容が見えるように修正してください。
luma

2015/12/20 02:40

他のユーザから「不正な編集がされた質問」という指摘をうけました 投稿していただいた質問は、後に他の誰かが困ったときに助けになる情報資産になります。 他のユーザにも質問内容が見えるように修正してください。
TakeOne

2015/12/23 14:09

他のユーザから「不正な編集がされた質問」という指摘をうけました 投稿していただいた質問は、後に他の誰かが困ったときに助けになる情報資産になります。 他のユーザにも質問内容が見えるように修正してください。
guest

回答1

0

自己解決

データ形式の問題でした。

投稿2015/09/29 06:18

uber

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問