質問編集履歴

4

追記3:1つのデータの受け渡しは解決、追記4:複数データの受け渡しについて。

2019/08/16 09:48

投稿

cucco
cucco

スコア15

test CHANGED
File without changes
test CHANGED
@@ -172,7 +172,7 @@
172
172
 
173
173
 
174
174
 
175
- char* dataS1 = "s0=123";
175
+ char* dataS1 = "s0=123"; // application/x-www-form-urlencoded フォーマット
176
176
 
177
177
  char* dataS2 = "\"s0\"=123";
178
178
 
@@ -194,7 +194,9 @@
194
194
 
195
195
  char* dataS11 = "{s0:\"123\"}";
196
196
 
197
- char* dataS12 = "{\"s0\":\"123\"}";
197
+ char* dataS12 = "{\"s0\":\"123\"}"; // application/json フォーマット
198
+
199
+
198
200
 
199
201
 
200
202
 
@@ -379,3 +381,145 @@
379
381
  との記載(ですので②)があり、今まで試していたのは①のs0=123という書き方だったのでこれが原因ではないかと思います。
380
382
 
381
383
  application/jsonでのフォーマットで試してみたいと思います。
384
+
385
+
386
+
387
+
388
+
389
+ ### 追記3
390
+
391
+ application/jsonでのフォーマットは
392
+
393
+ ```ここに言語を入力
394
+
395
+   char* dataS12 = "{\"s0\":\"123\"}";
396
+
397
+ ```
398
+
399
+ になると思います。(WioLTEのコードのdataS1からdataS11までは削除)
400
+
401
+
402
+
403
+ test.phpに
404
+
405
+ ```
406
+
407
+ $json_string = file_get_contents('php://input');
408
+
409
+ $obj = json_decode($json_string);
410
+
411
+ file_put_contents( '***/log.txt', date("Y/m/d H:i:s")."\n", FILE_APPEND | LOCK_EX );
412
+
413
+ file_put_contents( '***/log.txt', "obj"."\n", FILE_APPEND | LOCK_EX );
414
+
415
+ file_put_contents( '***/log.txt', print_r($obj, true)."\n", FILE_APPEND | LOCK_EX );
416
+
417
+ ```
418
+
419
+ を追加・変更すると
420
+
421
+ ***
422
+
423
+ 2019/08/16 18:03:54
424
+
425
+ obj
426
+
427
+ stdClass Object
428
+
429
+ (
430
+
431
+ [s0] => 123
432
+
433
+ )
434
+
435
+ ***
436
+
437
+ という結果が得られました!
438
+
439
+ WioLTEのライブラリのhttpPOST関数では、Content-Typeがapplication/x-www-form-urlencodedではなく、application/jsonだったことが原因でした。
440
+
441
+
442
+
443
+
444
+
445
+ ### 追記4
446
+
447
+ 追記3で今回の目的の趣旨は解決ですが、データが複数の場合の情報も残したいと思います。
448
+
449
+ と思ったら、連想配列objから個別にデータを取り出せない…
450
+
451
+
452
+
453
+ WioLTEのコード
454
+
455
+ ```ここに言語を入力
456
+
457
+ char* dataS = "{\"s0\":\"123\",\"s1\":\"456\"}";
458
+
459
+ ```
460
+
461
+
462
+
463
+ test.php
464
+
465
+ ```ここに言語を入力
466
+
467
+ $json_string = file_get_contents('php://input');
468
+
469
+ $obj = json_decode($json_string);
470
+
471
+
472
+
473
+ file_put_contents( '***/log.txt', date("Y/m/d H:i:s")."\n", FILE_APPEND | LOCK_EX );
474
+
475
+ file_put_contents( '***/log.txt', "obj"."\n", FILE_APPEND | LOCK_EX );
476
+
477
+ file_put_contents( '***/log.txt', print_r($obj, true)."\n", FILE_APPEND | LOCK_EX );
478
+
479
+
480
+
481
+ file_put_contents( '***/log.txt', "Data"."\n", FILE_APPEND | LOCK_EX );
482
+
483
+ file_put_contents( '***/log.txt', "Data1(s0)=".$obj['s0']."\n", FILE_APPEND | LOCK_EX );
484
+
485
+ file_put_contents( '***/log.txt', "Data2(s1)=".$obj['s1']."\n", FILE_APPEND | LOCK_EX );
486
+
487
+ file_put_contents( '***/log.txt', "\n", FILE_APPEND | LOCK_EX );
488
+
489
+ ```
490
+
491
+ 結果(log.txt)
492
+
493
+ ***
494
+
495
+ 2019/08/16 18:43:30
496
+
497
+ obj
498
+
499
+ stdClass Object
500
+
501
+ (
502
+
503
+ [s0] => 123
504
+
505
+ [s1] => 456
506
+
507
+ )
508
+
509
+
510
+
511
+ Data
512
+
513
+ ***
514
+
515
+ Dataの下に
516
+
517
+ Data1(s0)=123
518
+
519
+ Data2(s1)=456
520
+
521
+ と表示されるはずがされていません…
522
+
523
+ objに「stdClass Object」という文字列も含まれているから連想配列ではない??
524
+
525
+ 調べてみます。

3

httpPOSTする際のContent-Typeについて

2019/08/16 09:48

投稿

cucco
cucco

スコア15

test CHANGED
File without changes
test CHANGED
@@ -355,3 +355,27 @@
355
355
 
356
356
 
357
357
  これらの結果から、test.phpに送るデータのフォーマット(name要素の指定)が悪いのではないかと考えています。
358
+
359
+
360
+
361
+
362
+
363
+ ### 追記2
364
+
365
+ httpPOSTする際のContent-Typeには
366
+
367
+ ① application/x-www-form-urlencoded
368
+
369
+ ② application/json
370
+
371
+ などいくつか種類があるようで、WioLTEのライブラリで使われているhttpPOST関数には
372
+
373
+ ```ここに言語を入力
374
+
375
+ #define HTTP_CONTENT_TYPE "application/json"
376
+
377
+ ```
378
+
379
+ との記載(ですので②)があり、今まで試していたのは①のs0=123という書き方だったのでこれが原因ではないかと思います。
380
+
381
+ application/jsonでのフォーマットで試してみたいと思います。

2

send.phpから空のデータを送って試してみた場合を追加しました。

2019/08/16 07:52

投稿

cucco
cucco

スコア15

test CHANGED
File without changes
test CHANGED
@@ -302,7 +302,41 @@
302
302
 
303
303
 
304
304
 
305
- これに確認用のsend.phpからデータを送信すると
305
+ これに確認用のsend.phpからデータ(s0=123)を送信すると
306
+
307
+ ***
308
+
309
+ 2019/08/16 15:54:28
310
+
311
+ Array
312
+
313
+ (
314
+
315
+ [s0] => 123
316
+
317
+ )
318
+
319
+ ***
320
+
321
+ と書き込まれ、空のデータ(s0=)を送信すると
322
+
323
+ ***
324
+
325
+ 2019/08/16 15:54:48
326
+
327
+ Array
328
+
329
+ (
330
+
331
+ [s0] =>
332
+
333
+ )
334
+
335
+ ***
336
+
337
+ と書き込まれます。
338
+
339
+ WioLTEから上記プログラムでデータを送信すると
306
340
 
307
341
  ***
308
342
 
@@ -312,28 +346,12 @@
312
346
 
313
347
  (
314
348
 
315
- [s0] => 123
316
-
317
349
  )
318
350
 
319
351
  ***
320
352
 
321
- と書き込まれますが、WioLTEから上記プログラムで送信すると
322
-
323
- ***
324
-
325
- 2019/08/16 15:54:48
326
-
327
- Array
328
-
329
- (
330
-
331
- )
332
-
333
- ***
334
-
335
353
  となります。(いろいろなフォーマットで12回送信しているので、これと同じように空の状態で12回書き込まれています。)
336
354
 
337
355
 
338
356
 
339
- です、test.phpに送るデータのフォーマット、書き方が悪いのではないかと考えています。
357
+ これら結果から、test.phpに送るデータのフォーマット(name要素の指定)が悪いのではないかと考えています。

1

t_obara様のアドバイスを受けて、PHP側でのデータ受信を確認しました。

2019/08/16 07:23

投稿

cucco
cucco

スコア15

test CHANGED
File without changes
test CHANGED
@@ -283,3 +283,57 @@
283
283
  dataS12: {"s0":"123"}
284
284
 
285
285
  Status:200
286
+
287
+
288
+
289
+ ### 追記
290
+
291
+ test.phpに下記3行を追加し、確認用としてログファイル(log.txt)に時刻と受け取ったデータ($_POST)を書き込むようにしました。
292
+
293
+ ```ここに言語を入力
294
+
295
+ file_put_contents( '***/log.txt', date("Y/m/d H:i:s")."\n", FILE_APPEND | LOCK_EX );
296
+
297
+ file_put_contents( '***/log.txt', print_r($_POST, true)."\n", FILE_APPEND | LOCK_EX );
298
+
299
+ file_put_contents( '***/log.txt', "\n", FILE_APPEND | LOCK_EX );
300
+
301
+ ```
302
+
303
+
304
+
305
+ これに確認用のsend.phpからデータを送信すると
306
+
307
+ ***
308
+
309
+ 2019/08/16 15:56:06
310
+
311
+ Array
312
+
313
+ (
314
+
315
+ [s0] => 123
316
+
317
+ )
318
+
319
+ ***
320
+
321
+ と書き込まれますが、WioLTEから上記プログラムで送信すると
322
+
323
+ ***
324
+
325
+ 2019/08/16 15:54:48
326
+
327
+ Array
328
+
329
+ (
330
+
331
+ )
332
+
333
+ ***
334
+
335
+ となります。(いろいろなフォーマットで12回送信しているので、これと同じように空の状態で12回書き込まれています。)
336
+
337
+
338
+
339
+ ですので、test.phpに送るデータのフォーマット、書き方が悪いのではないかと考えています。