###ios側からNSULssesionで送られてくるjson形式のデータをphpを使って取得がしたい。
phpで処理しているのは見かけるんですがjavaでできるのかな?と
下記のソースコードでjsonを取得しようとしているのですが、おそらくios側でキーを設定していないために取得ができません。
キーの設定はどうすればよいのでしょうか?
キーは設定できないのでしょうか?
説明不足でしたので補足いたします-2016/06/16
具体的に以下のios(Objective-c)とphp,javaのソースコードで実行しています。
進展としまして、php,javaともにios側に固定値を返すことができたのでURLが間違っている事やサーバー側の問題とは考えにくい状況なのです。(初心者なので絶対とは言い切れませんが...)
それとgoogleのアプリ(?)のpostmanを使用すると、php,javaともにきれいに値が取れます。
###もうjavaはあきらめてphpにします。
そこでphpのほうでもう一度質問させていただきます。
phpの詳しいソースも掲載いたしました。
よろしくお願いします
###発生している問題・エラーメッセージ
なぜjsonの値が取れないのか検討が付かない状況です。 先輩方はコレと同じ状況で取得ができているため、前例はあるといっています。
###該当のソースコード
------ios------- NSArray *lData = @[@{@"loginID":@"yamada",@"password":@"hello"}]; NSData *data = [NSJSONSerialization dataWithJSONObject:lData options:NSJSONWritingPrettyPrinted error:nil]; NSString *urlstr = [NSString stringWithFormat:@"接続先URL"]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setHTTPMethod:@"POST"]; [request setURL:[NSURL URLWithString:urlstr]]; [request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData]; [request setTimeoutInterval:2.0]; [request setHTTPShouldHandleCookies:false]; [request setHTTPBody:data]; NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request]; [task resume]; ------php------- ①<?php header("Content-Type:applicasion/json"); $json = file_get_contents('php://input'); if(!empty($json)){ $jsonA = json_decode($json); echo json_encode($jsonA); exit(); }else{ $rArray = array("hoge" =>"hage2" , "hoge" =>"hage"); echo json_encode($rArray); exit(); } ?> ②<?php header("Content-Type:applicasion/json"); $json = file_get_contents('php://input'); echo json_decode($json); echo json_encode($json); exit(); } ?> ③<?php header("Content-Type:applicasion/json"); $json = file_get_contents('php://input'); $logID = $_POST['loginID']; $pass = $_POST['password']; $rArray = array("loginID" => $logID , "password" => $pass); echo json_encode($rArray); exit(); } ?> ###試したこと なのでphpに乗り換えて試していたのですがやはりうまくいきませんでした。 php://inputの周りが把握仕切れていません。 何か用意するファイルなどはあるのでしょうか? ###補足情報(言語/FW/ツール等のバージョンなど) Apach2.4(php) , ios,xcode ,php5 phpの場所ですが、同一PCではなく別PCにApach2.4を立ててその上において参照をしています。 叩き方は[例:)http://255.255.255.255/input2.php]のように叩いています。 PHPのversionは5です。 ###php側での挙動 ①のソースで行うと { "hoge" : "hage" } が帰ってきます。 ②のソースで行うとnullが帰ってきます。 ③のソースで行うとnullが帰ってきます。 取得したい値は { "loginID" : "yamada", "password" : "hallo" } です。 今はPHP側でiosから送られてきたデータをそのまま返す形にしています。 ###うまくいかなかった理由 クエリ文字に変換してNSDataに格納し送ってみたもののnullが返ってきました。 それとちがっていたら申し訳ないんですがURLの後ろに値が付くものってGETでの送信ではないのでしょうか? POSTは内部的にデータが送られるものと認識していたのですが... ###postmanでの挙動 [![](d60cfb68853f4d65c257635037503bbb.png) ###ios側の実行環境 Xcodeでのiosシュミレータはiphone6のios8以降 実機はiphone5sのios7.0でした。 ###urlの実行結果 Time: Sun, 19 Jun 16 18:05:25 -0700 Source ip: Headers (Some may be inserted by server) REQUEST_URI = /post.php QUERY_STRING = REQUEST_METHOD = POST GATEWAY_INTERFACE = REMOTE_PORT = REMOTE_ADDR = CONTENT_LENGTH = 62 HTTP_ACCEPT_ENCODING = gzip, deflate HTTP_ACCEPT_LANGUAGE = HTTP_USER_AGENT = HTTP_ACCEPT = application/json HTTP_CONNECTION = close CONTENT_TYPE = application/json HTTP_HOST = UNIQUE_ID = REQUEST_TIME_FLOAT = 1466384725.1898 REQUEST_TIME = 1466384725 No Post Params. == Begin post body == [ { "loginID" : "yamada", "password" : "hello" } ] == End post body == Upload contains PUT data: [ { "loginID" : "yamada", "password" : "hello" } ] ###上記URLの返信を受けてやったこと。 allow_url_fopen = on <-もともとなっていました。 <?php header("Content-Type:applicasion/json"); $url = "php://input"; // 対象のURL $ch = curl_init(); // 初期化 curl_setopt( $ch, CURLOPT_URL, $url ); // URLの設定 curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); // 出力内容を受け取る設定 $json = curl_exec( $ch ); // データの取得 curl_close($ch); // cURLのクローズ 以下①のphp文 ?> <-今から試してみます。
回答4件
あなたの回答
tips
プレビュー