回答編集履歴

3

補足

2016/06/17 08:58

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -91,3 +91,15 @@
91
91
  http://posttestserver.com/post.php
92
92
 
93
93
  接続先URLをこのURLに変えてみてアクセスしてみてください。レスポンスに「どこのURLに保存した」といった旨の記載があるので、Xcode上でレスポンスを解析して、該当URLへアクセスしてみてください。
94
+
95
+
96
+
97
+ 念のため伝えておきますが、上記ツールに送信するデータは
98
+
99
+ **!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
100
+
101
+ 絶対に本当のパスワードやIDを送信してはいけません。
102
+
103
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**
104
+
105
+ このツールに限ったことではないですが、「自身の管理の外のWebツール」には絶対にセキュリティ情報や漏れてほしくない情報をPOSTしてはいけません。どんなふうに悪用されても責任は取れません。

2

追記

2016/06/17 08:58

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -77,3 +77,17 @@
77
77
 
78
78
 
79
79
  私が教えられるのはここまでです。iOSでURLEncodeする方法は自分で調べてみてください。
80
+
81
+
82
+
83
+ ###動作テスト
84
+
85
+ [https://posttestserver.com/](https://posttestserver.com/)
86
+
87
+
88
+
89
+ 以下のURLにPOSTを行うと、サーバで送られたデータのログが保存され、それを参照することができます。
90
+
91
+ http://posttestserver.com/post.php
92
+
93
+ 接続先URLをこのURLに変えてみてアクセスしてみてください。レスポンスに「どこのURLに保存した」といった旨の記載があるので、Xcode上でレスポンスを解析して、該当URLへアクセスしてみてください。

1

追記

2016/06/17 08:44

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -13,3 +13,67 @@
13
13
  ↓json文字列部分をURLエンコード
14
14
 
15
15
  json=%7B%22test%22%3A%22test%22%2C%20%22test2%22%3A1%7D
16
+
17
+
18
+
19
+ #追記
20
+
21
+ 質問文のコードが追加されたので指摘を追記します。
22
+
23
+
24
+
25
+ ```Java
26
+
27
+ request.getParameter("json")
28
+
29
+ ```
30
+
31
+
32
+
33
+ この[ServletRequest#getParameter](http://mergedoc.osdn.jp/tomcat-servletapi-5-ja/javax/servlet/ServletRequest.html#getParameter(java.lang.String))は、特定のルールに基づいたデータを解析してデータを取得しています。その特定のルールというのが**クエリ文字列**と呼ばれるものです。**クエリ文字列**はXXX=YYYという、イコールで結ばれた「名前」と「値」です。XXX=YYY&AAA=BBBといった文字列を、URLで見たことがありませんか?
34
+
35
+ で、上記コードに戻りますが、これは**クエリ文字列**がjson=XXXXXXXXXXXだった時にXXXXXXXXXXXを受け取る処理です。つまり、あなたがiOSから送るPOSTデータはjson=XXXXXXXXXXXという形でなければなりません。
36
+
37
+ ここであなたのiOSのコードを見てみましょう。
38
+
39
+
40
+
41
+ ```Objective-C
42
+
43
+ NSArray *lData = @[@{@"loginID":@"yamada",@"password":@"hello"}];
44
+
45
+ NSData *data = [NSJSONSerialization dataWithJSONObject:lData options:NSJSONWritingPrettyPrinted error:nil];
46
+
47
+ ```
48
+
49
+ ここで得られるdataにはどのような文字列が格納されているか?iOSの環境が手元にないので確認できませんが、こんな文字列になっているでしょう。
50
+
51
+ ```JSON
52
+
53
+ [{"loginID":"yamada","password":"hello"}]
54
+
55
+ ```
56
+
57
+ そして、この文字列をそのままsetHTTPBodyで送信データとして格納しています。
58
+
59
+ これは**クエリ文字列**の形式を保っていません。あるべき送信データの形はこうです。
60
+
61
+
62
+
63
+ json=[{"loginID":"yamada","password":"hello"}]
64
+
65
+
66
+
67
+ そして、**クエリ文字列**の「値」の部分はURLエンコードされている必要があるため、
68
+
69
+
70
+
71
+ json=%5B%7B%22loginID%22%3A%22yamada%22%2C%22password%22%3A%22hello%22%7D%5D
72
+
73
+
74
+
75
+ こうなります。なので、最終的にNSDataに上記文字列が入っていればJavaのgetParameterで受け取れるはずです。
76
+
77
+
78
+
79
+ 私が教えられるのはここまでです。iOSでURLEncodeする方法は自分で調べてみてください。