質問編集履歴

7

細部修正

2018/03/10 10:15

投稿

rx79bd1
rx79bd1

スコア8

test CHANGED
File without changes
test CHANGED
@@ -450,7 +450,7 @@
450
450
 
451
451
  - 会社のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
452
452
 
453
- - 自分のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
453
+
454
454
 
455
455
  - 自宅のパソコン & 自宅のネットワーク → 1,OK 2,NG 3,OK
456
456
 
@@ -462,9 +462,7 @@
462
462
 
463
463
 
464
464
 
465
- となりました。この結果から、ネットワークの可能性は低いと判断しました
465
+ となりました。この結果から、ネットワークの可能性は低いと判断しました
466
-
467
-
468
466
 
469
467
 
470
468
 
@@ -584,7 +582,7 @@
584
582
 
585
583
  以上のことから、ヘッダーとボディをひとつのパケットで送り出すことが
586
584
 
587
- 鍵であるようです。
585
+ 鍵である可能性が高いと考えております。
588
586
 
589
587
  (pythonだと分割しても大丈夫なようですが、c#だと駄目、というのは解せない
590
588
 
@@ -592,9 +590,9 @@
592
590
 
593
591
 
594
592
 
595
- 無理やりの方法は判明しましたが、可能であればhttpclientなどライブラリ
593
+ 無理やりの方法は判明しましたが、可能であればデバッグ手間省くため、
596
-
594
+
597
- 使いたいと考えております。
595
+ httpclientなどの既存ライブラリを使いたく存じます。
598
596
 
599
597
 
600
598
 

6

誤字脱字修正

2018/03/10 10:15

投稿

rx79bd1
rx79bd1

スコア8

test CHANGED
File without changes
test CHANGED
@@ -438,11 +438,11 @@
438
438
 
439
439
  確認項目
440
440
 
441
- 0. 番号リストツールでは返信があるか
441
+ 0. ツール(Insomnia)では返信があるか
442
-
442
+
443
- 0. 番号リスト自作のc#アプリでは返信があるか
443
+ 0. 自作のc#アプリでは返信があるか
444
-
444
+
445
- 0. 番号リストアドレス(今回はニコニコ動画の情報取得APIを利用)では返信があるか
445
+ 0. 自作c#でAPI(今回はニコニコ動画の情報取得APIを利用)では返信があるか
446
446
 
447
447
 
448
448
 
@@ -492,6 +492,10 @@
492
492
 
493
493
 
494
494
 
495
+ Fiddlerの結果から、改めてbodyとheaderを同時に送りどうなるか
496
+
497
+ 確認したくなったため、無理やりですが、実際に試してみました。
498
+
495
499
  結論から言えば、成功しました。
496
500
 
497
501
  C#で、以下のようなコードでPOSTを行いました。

5

見づらい部分を修正しました。

2018/03/10 10:08

投稿

rx79bd1
rx79bd1

スコア8

test CHANGED
File without changes
test CHANGED
@@ -438,29 +438,27 @@
438
438
 
439
439
  確認項目
440
440
 
441
- 1,ツールでは返信があるか
441
+ 0. 番号リストツールでは返信があるか
442
-
442
+
443
- 2,自作のc#アプリでは返信があるか
443
+ 0. 番号リスト自作のc#アプリでは返信があるか
444
-
444
+
445
- 3,別アドレス(今回はニコニコ動画の情報取得APIを利用)では返信があるか
445
+ 0. 番号リスト別アドレス(今回はニコニコ動画の情報取得APIを利用)では返信があるか
446
-
447
-
448
-
446
+
447
+
448
+
449
- 会社のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
449
+ - 会社のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
450
-
450
+
451
- 会社のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
451
+ - 会社のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
452
-
452
+
453
- 自分のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
453
+ - 自分のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
454
-
455
-
456
-
454
+
457
- 自宅のパソコン & 自宅のネットワーク → 1,OK 2,NG 3,OK
455
+ - 自宅のパソコン & 自宅のネットワーク → 1,OK 2,NG 3,OK
458
-
456
+
459
- 自宅のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
457
+ - 自宅のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
460
-
458
+
461
- 自宅のパソコン & 自分のポケットWIFI → 1,OK 2,NG 3,OK
459
+ - 自宅のパソコン & 自分のポケットWIFI → 1,OK 2,NG 3,OK
462
-
460
+
463
- 自宅のパソコン & 自分のポケットWIFI(一度初期化してSIMだけ再設定) → 1,OK 2,NG 3,OK
461
+ - 自宅のパソコン & 自分のポケットWIFI(一度初期化してSIMだけ再設定) → 1,OK 2,NG 3,OK
464
462
 
465
463
 
466
464
 

4

現在までに判明したことを追記しました。

2018/03/10 10:03

投稿

rx79bd1
rx79bd1

スコア8

test CHANGED
File without changes
test CHANGED
@@ -10,17 +10,17 @@
10
10
 
11
11
 
12
12
 
13
- **~~C#のhttpClientを利用してPOSTを行った際、パケットを見ると
13
+ ~~**~~C#のhttpClientを利用してPOSTを行った際、パケットを見ると
14
-
14
+
15
- ヘッダーとボディーが分割されているように見える。これを同じパケットで送ることは出来ないか?~~**
15
+ ヘッダーとボディーが分割されているように見える。これをhttpclientで同じパケットで送ることは出来ないか?~~**~~
16
-
17
-
18
-
16
+
17
+
18
+
19
- **pythonではpostが成功するのに、c#のhttpclientでは失敗する。何が原因なのか?**
19
+ ~~**pythonではpostが成功するのに、c#のhttpclientでは失敗する。何が原因なのか?**~~
20
-
21
-
22
-
20
+
21
+
22
+
23
- ということがお聞きしたい内容です。(2018/03/08 13:49 アップデート)
23
+ ということがお聞きしたい内容です。(2018/03/10 18:28 アップデート)
24
24
 
25
25
 
26
26
 
@@ -405,3 +405,195 @@
405
405
  そのため、パケットが別れているから駄目だった、という私の考えは間違っていたことが
406
406
 
407
407
  判明しました。
408
+
409
+
410
+
411
+
412
+
413
+ ---
414
+
415
+ 2018/03/10 18:28 追記
416
+
417
+ ---
418
+
419
+
420
+
421
+ いろいろな方のご意見を受けて、改めて調査を行いました。
422
+
423
+
424
+
425
+ ① 問題がネットワークにあるかどうか
426
+
427
+
428
+
429
+ 自宅を含めた別ネットワークについては一度確認していることですが、
430
+
431
+ 改めて調査を行いました。
432
+
433
+ なお、自分のパソコン、ネットワークはプロキシがないことを確認しています。
434
+
435
+ 会社のパソコン、ネットワークはプロキシは不明です。
436
+
437
+
438
+
439
+ 確認項目
440
+
441
+ 1,ツールでは返信があるか
442
+
443
+ 2,自作のc#アプリでは返信があるか
444
+
445
+ 3,別アドレス(今回はニコニコ動画の情報取得APIを利用)では返信があるか
446
+
447
+
448
+
449
+ 会社のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
450
+
451
+ 会社のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
452
+
453
+ 自分のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
454
+
455
+
456
+
457
+ 自宅のパソコン & 自宅のネットワーク → 1,OK 2,NG 3,OK
458
+
459
+ 自宅のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
460
+
461
+ 自宅のパソコン & 自分のポケットWIFI → 1,OK 2,NG 3,OK
462
+
463
+ 自宅のパソコン & 自分のポケットWIFI(一度初期化してSIMだけ再設定) → 1,OK 2,NG 3,OK
464
+
465
+
466
+
467
+ となりました。この結果から、ネットワークの可能性は低いと判断しました
468
+
469
+
470
+
471
+
472
+
473
+ ② ソケットを食いつぶしているかどうか
474
+
475
+
476
+
477
+ 日をまたいで、起動直後に試しても、状況は変わりませんでした。
478
+
479
+
480
+
481
+ ③ Fiddlerはパケットに対して何か影響を与えるのか
482
+
483
+
484
+
485
+ 調査の結果、Fiddlerのインストール直後の状態では、パケットに対して影響がありました。
486
+
487
+ わかりやすいところで言うと、Fiddlerを介すると、Wireshark上でReassembled TCP
488
+
489
+ が無くなることが分かりました。
490
+
491
+
492
+
493
+ ④ 同一パケットでbodyを送ると成功するのか
494
+
495
+
496
+
497
+ 結論から言えば、成功しました。
498
+
499
+ C#で、以下のようなコードでPOSTを行いました。
500
+
501
+ 反応が見たいだけですので、今は命令を出すところしか構築していません。
502
+
503
+
504
+
505
+ ```C#
506
+
507
+ using (var socket = new TcpClient())
508
+
509
+ {
510
+
511
+
512
+
513
+ string json = "リクエストボディ部";
514
+
515
+
516
+
517
+ socket.Connect("ip", port);
518
+
519
+ var body = Encoding.UTF8.GetBytes(json);
520
+
521
+ var bodyLength = Encoding.UTF8.GetByteCount(json);
522
+
523
+
524
+
525
+ var headerContent = new StringBuilder();
526
+
527
+ headerContent.AppendLine("POST /v1/dummy HTTP/1.1");
528
+
529
+ headerContent.AppendLine("Accept: */*");
530
+
531
+ headerContent.AppendLine("Host: " + "ip:port");
532
+
533
+ headerContent.AppendLine("Content-Type: application/json; charset=utf-8");
534
+
535
+ headerContent.AppendLine("Content-Length: " + bodyLength);
536
+
537
+ headerContent.AppendLine("Connection: Close");
538
+
539
+ headerContent.AppendLine();
540
+
541
+ headerContent.AppendLine(json);
542
+
543
+ var headerString = headerContent.ToString();
544
+
545
+ var header = Encoding.UTF8.GetBytes(headerString);
546
+
547
+ var headerLength = Encoding.UTF8.GetByteCount(headerString);
548
+
549
+
550
+
551
+ using (var stream = socket.GetStream())
552
+
553
+ {
554
+
555
+ stream.Write(header, 0, headerLength);
556
+
557
+ //stream.Write(body, 0, bodyLength);
558
+
559
+ }
560
+
561
+ }
562
+
563
+ ```
564
+
565
+
566
+
567
+ いろいろ粗が目立ちますが、ひとますこれでテストしました。
568
+
569
+ ヘッダーを自分で書いてそのまま投げるイメージです。
570
+
571
+ こうすると、末尾に無理やりJSONをつけて渡すことができます。
572
+
573
+
574
+
575
+ この方法だと、Fiddlerを介さずとも100%返信が来るようになりました。
576
+
577
+ (Wireshark上で確認)
578
+
579
+
580
+
581
+
582
+
583
+ 以上のことから、ヘッダーとボディをひとつのパケットで送り出すことが
584
+
585
+ 鍵であるようです。
586
+
587
+ (pythonだと分割しても大丈夫なようですが、c#だと駄目、というのは解せない
588
+
589
+  ですが、正常に通信できる方法が確立した後に考えたいと思います。)
590
+
591
+
592
+
593
+ 無理やりの方法は判明しましたが、可能であればhttpclientなどのライブラリを
594
+
595
+ 使いたいと考えております。
596
+
597
+
598
+
599
+ やり方をご存知の方がいましたらご教示ください。

3

解決したい課題について更新しました。

2018/03/10 10:01

投稿

rx79bd1
rx79bd1

スコア8

test CHANGED
File without changes
test CHANGED
@@ -10,11 +10,17 @@
10
10
 
11
11
 
12
12
 
13
- **C#のhttpClientを利用してPOSTを行った際、パケットを見ると
13
+ **~~C#のhttpClientを利用してPOSTを行った際、パケットを見ると
14
-
14
+
15
- ヘッダーとボディーが分割されているように見える。これを同じパケットで送ることは出来ないか?**
15
+ ヘッダーとボディーが分割されているように見える。これを同じパケットで送ることは出来ないか?~~**
16
+
17
+
18
+
16
-
19
+ **pythonではpostが成功するのに、c#のhttpclientでは失敗する。何が原因なのか?**
20
+
21
+
22
+
17
- ということがお聞きしたい内容です。
23
+ ということがお聞きしたい内容です。(2018/03/08 13:49 アップデート)
18
24
 
19
25
 
20
26
 

2

別言語での成功事例について追記しました。

2018/03/08 04:50

投稿

rx79bd1
rx79bd1

スコア8

test CHANGED
File without changes
test CHANGED
@@ -313,3 +313,89 @@
313
313
 
314
314
 
315
315
  Wiresharkでパケット解析をしながら行ったのですが、POSTは出来てきますが、その返事がないという状況です。
316
+
317
+
318
+
319
+ 2018/03/08 10:16 追記
320
+
321
+
322
+
323
+ 筐体の問題およびネットワークの問題なのか、プログラム言語の問題なのかを
324
+
325
+ 切り分けるため、次の作業を行いました。
326
+
327
+
328
+
329
+ 1、プロキシの確認
330
+
331
+ 2、別言語(Python)での確認
332
+
333
+
334
+
335
+ 1、についてですが、こちらは設定されておりませんでした。ただし、社内ネットワークであるため、何らかの制限がかかっている可能性は否めません。
336
+
337
+ 実際に、一部のサイトは閲覧制限がかかっているため、閲覧できないサイトもあります。
338
+
339
+
340
+
341
+ 2、1、の結果を受けて、問題の切り分けのため、別言語での検証を行いました。
342
+
343
+
344
+
345
+ 開発環境はVisualStudio2017と、Anacondaを利用したpython3.6となっています。
346
+
347
+
348
+
349
+ ```Python
350
+
351
+ import urllib.request, json
352
+
353
+
354
+
355
+ if __name__ == '__main__':
356
+
357
+ url = "http://dummy"
358
+
359
+ method = "POST"
360
+
361
+ headers = {"Content-Type" : "application/json"}
362
+
363
+
364
+
365
+ # PythonオブジェクトをJSONに変換する
366
+
367
+ obj = {"test" : "test", 123 : 123}
368
+
369
+ json_data = json.dumps(obj).encode("utf-8")
370
+
371
+
372
+
373
+ # httpリクエストを準備してPOST
374
+
375
+ request = urllib.request.Request(url, data=json_data, method=method, headers=headers)
376
+
377
+ with urllib.request.urlopen(request) as response:
378
+
379
+ response_body = response.read().decode("utf-8")
380
+
381
+
382
+
383
+ ```
384
+
385
+ JSONは適当に入力したため、正常なデータは帰ってきませんが、
386
+
387
+ 構文が違うという400(Bad Request)が帰ってきました。この後、jsonを
388
+
389
+ 正しく設定すると、必要なデータが取得できました。
390
+
391
+
392
+
393
+ このことから、ネットワーク自体に問題は無いものと思われます。
394
+
395
+
396
+
397
+ Wiresharkで確認すると、reassembled TCP、及びTCP Segmentsの項目がありました。
398
+
399
+ そのため、パケットが別れているから駄目だった、という私の考えは間違っていたことが
400
+
401
+ 判明しました。

1

お答えいただいた内容に対して、幾つか追記を行いました。

2018/03/08 01:29

投稿

rx79bd1
rx79bd1

スコア8

test CHANGED
File without changes
test CHANGED
@@ -255,3 +255,61 @@
255
255
 
256
256
 
257
257
  以上、よろしくお願い致します。
258
+
259
+
260
+
261
+ *********************************************************************************************
262
+
263
+ 以降、追記部分となります。
264
+
265
+ *********************************************************************************************
266
+
267
+
268
+
269
+ 2018/03/08 9:17 追記
270
+
271
+
272
+
273
+ 1,ファイアウォールとアンチウイルスソフトについて
274
+
275
+
276
+
277
+ 先程、開発用PCにインストールされている該当のソフトを一時的にオフにし、さらにウィンドウズのファイアウォールも
278
+
279
+ オフにしましたが、状況に変化はございませんでした。
280
+
281
+
282
+
283
+ 2,エラーメッセージの詳細
284
+
285
+
286
+
287
+ 本日あらためてトライしたところ、次のようなエラーとなりました。
288
+
289
+ **昨日と異なるエラーとなっています。**(名前等は修正してあります。)
290
+
291
+
292
+
293
+ System.Threading.Tasks.TaskCanceledException はユーザー コードによってハンドルされませんでした。
294
+
295
+ HResult=-2146233029
296
+
297
+ Message=タスクが取り消されました。
298
+
299
+ Source=mscorlib
300
+
301
+ StackTrace:
302
+
303
+ 場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
304
+
305
+ 場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
306
+
307
+ 場所 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
308
+
309
+ 場所 origin2.ViewModels.MainWindowViewModel.<Login_test>d__5.MoveNext() 場所 C:\Users\dummy\Documents\sample_prog\test\test\ViewModels\MainWindowViewModel.cs:行 253
310
+
311
+ InnerException:
312
+
313
+
314
+
315
+ Wiresharkでパケット解析をしながら行ったのですが、POSTは出来てきますが、その返事がないという状況です。