teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

7

細部修正

2018/03/10 10:15

投稿

rx79bd1
rx79bd1

スコア8

title CHANGED
File without changes
body CHANGED
@@ -224,14 +224,13 @@
224
224
 
225
225
  - 会社のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
226
226
  - 会社のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
227
- - 自分のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
227
+
228
228
  - 自宅のパソコン & 自宅のネットワーク → 1,OK 2,NG 3,OK
229
229
  - 自宅のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
230
230
  - 自宅のパソコン & 自分のポケットWIFI → 1,OK 2,NG 3,OK
231
231
  - 自宅のパソコン & 自分のポケットWIFI(一度初期化してSIMだけ再設定) → 1,OK 2,NG 3,OK
232
232
 
233
- となりました。この結果から、ネットワークの可能性は低いと判断しました
233
+ となりました。この結果から、ネットワークの可能性は低いと判断しました
234
-
235
234
 
236
235
  ② ソケットを食いつぶしているかどうか
237
236
 
@@ -291,11 +290,11 @@
291
290
 
292
291
 
293
292
  以上のことから、ヘッダーとボディをひとつのパケットで送り出すことが
294
- 鍵であるようです。
293
+ 鍵である可能性が高いと考えております。
295
294
  (pythonだと分割しても大丈夫なようですが、c#だと駄目、というのは解せない
296
295
   ですが、正常に通信できる方法が確立した後に考えたいと思います。)
297
296
 
298
- 無理やりの方法は判明しましたが、可能であればhttpclientなどライブラリ
297
+ 無理やりの方法は判明しましたが、可能であればデバッグ手間省くため、
299
- 使いたいと考えております。
298
+ httpclientなどの既存ライブラリを使いたく存じます。
300
299
 
301
300
  やり方をご存知の方がいましたらご教示ください。

6

誤字脱字修正

2018/03/10 10:15

投稿

rx79bd1
rx79bd1

スコア8

title CHANGED
File without changes
body CHANGED
@@ -218,9 +218,9 @@
218
218
  会社のパソコン、ネットワークはプロキシは不明です。
219
219
 
220
220
  確認項目
221
- 0. 番号リストツールでは返信があるか
221
+ 0. ツール(Insomnia)では返信があるか
222
- 0. 番号リスト自作のc#アプリでは返信があるか
222
+ 0. 自作のc#アプリでは返信があるか
223
- 0. 番号リストアドレス(今回はニコニコ動画の情報取得APIを利用)では返信があるか
223
+ 0. 自作c#でAPI(今回はニコニコ動画の情報取得APIを利用)では返信があるか
224
224
 
225
225
  - 会社のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
226
226
  - 会社のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
@@ -245,6 +245,8 @@
245
245
 
246
246
  ④ 同一パケットでbodyを送ると成功するのか
247
247
 
248
+ Fiddlerの結果から、改めてbodyとheaderを同時に送りどうなるか
249
+ 確認したくなったため、無理やりですが、実際に試してみました。
248
250
  結論から言えば、成功しました。
249
251
  C#で、以下のようなコードでPOSTを行いました。
250
252
  反応が見たいだけですので、今は命令を出すところしか構築していません。

5

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

2018/03/10 10:08

投稿

rx79bd1
rx79bd1

スコア8

title CHANGED
File without changes
body CHANGED
@@ -218,19 +218,18 @@
218
218
  会社のパソコン、ネットワークはプロキシは不明です。
219
219
 
220
220
  確認項目
221
- 1,ツールでは返信があるか
221
+ 0. 番号リストツールでは返信があるか
222
- 2,自作のc#アプリでは返信があるか
222
+ 0. 番号リスト自作のc#アプリでは返信があるか
223
- 3,別アドレス(今回はニコニコ動画の情報取得APIを利用)では返信があるか
223
+ 0. 番号リスト別アドレス(今回はニコニコ動画の情報取得APIを利用)では返信があるか
224
224
 
225
- 会社のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
225
+ - 会社のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
226
- 会社のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
226
+ - 会社のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
227
- 自分のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
227
+ - 自分のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
228
+ - 自宅のパソコン & 自宅のネットワーク → 1,OK 2,NG 3,OK
229
+ - 自宅のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
230
+ - 自宅のパソコン & 自分のポケットWIFI → 1,OK 2,NG 3,OK
231
+ - 自宅のパソコン & 自分のポケットWIFI(一度初期化してSIMだけ再設定) → 1,OK 2,NG 3,OK
228
232
 
229
- 自宅のパソコン & 自宅のネットワーク → 1,OK 2,NG 3,OK
230
- 自宅のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
231
- 自宅のパソコン & 自分のポケットWIFI → 1,OK 2,NG 3,OK
232
- 自宅のパソコン & 自分のポケットWIFI(一度初期化してSIMだけ再設定) → 1,OK 2,NG 3,OK
233
-
234
233
  となりました。この結果から、ネットワークの可能性は低いと判断しました
235
234
 
236
235
 

4

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

2018/03/10 10:03

投稿

rx79bd1
rx79bd1

スコア8

title CHANGED
File without changes
body CHANGED
@@ -4,12 +4,12 @@
4
4
 
5
5
  【 解決したい課題 】
6
6
 
7
- **~~C#のhttpClientを利用してPOSTを行った際、パケットを見ると
7
+ ~~**~~C#のhttpClientを利用してPOSTを行った際、パケットを見ると
8
- ヘッダーとボディーが分割されているように見える。これを同じパケットで送ることは出来ないか?~~**
8
+ ヘッダーとボディーが分割されているように見える。これをhttpclientで同じパケットで送ることは出来ないか?~~**~~
9
9
 
10
- **pythonではpostが成功するのに、c#のhttpclientでは失敗する。何が原因なのか?**
10
+ ~~**pythonではpostが成功するのに、c#のhttpclientでは失敗する。何が原因なのか?**~~
11
11
 
12
- ということがお聞きしたい内容です。(2018/03/08 13:49 アップデート)
12
+ ということがお聞きしたい内容です。(2018/03/10 18:28 アップデート)
13
13
 
14
14
 
15
15
  【 質問者のスキル 】
@@ -201,4 +201,100 @@
201
201
 
202
202
  Wiresharkで確認すると、reassembled TCP、及びTCP Segmentsの項目がありました。
203
203
  そのため、パケットが別れているから駄目だった、という私の考えは間違っていたことが
204
- 判明しました。
204
+ 判明しました。
205
+
206
+
207
+ ---
208
+ 2018/03/10 18:28 追記
209
+ ---
210
+
211
+ いろいろな方のご意見を受けて、改めて調査を行いました。
212
+
213
+ ① 問題がネットワークにあるかどうか
214
+
215
+ 自宅を含めた別ネットワークについては一度確認していることですが、
216
+ 改めて調査を行いました。
217
+ なお、自分のパソコン、ネットワークはプロキシがないことを確認しています。
218
+ 会社のパソコン、ネットワークはプロキシは不明です。
219
+
220
+ 確認項目
221
+ 1,ツールでは返信があるか
222
+ 2,自作のc#アプリでは返信があるか
223
+ 3,別アドレス(今回はニコニコ動画の情報取得APIを利用)では返信があるか
224
+
225
+ 会社のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
226
+ 会社のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
227
+ 自分のパソコン & 会社のネットワーク → 1,OK 2,NG 3,OK
228
+
229
+ 自宅のパソコン & 自宅のネットワーク → 1,OK 2,NG 3,OK
230
+ 自宅のパソコン & 自分のテザリング → 1,OK 2,NG 3,OK
231
+ 自宅のパソコン & 自分のポケットWIFI → 1,OK 2,NG 3,OK
232
+ 自宅のパソコン & 自分のポケットWIFI(一度初期化してSIMだけ再設定) → 1,OK 2,NG 3,OK
233
+
234
+ となりました。この結果から、ネットワークの可能性は低いと判断しました
235
+
236
+
237
+ ② ソケットを食いつぶしているかどうか
238
+
239
+ 日をまたいで、起動直後に試しても、状況は変わりませんでした。
240
+
241
+ ③ Fiddlerはパケットに対して何か影響を与えるのか
242
+
243
+ 調査の結果、Fiddlerのインストール直後の状態では、パケットに対して影響がありました。
244
+ わかりやすいところで言うと、Fiddlerを介すると、Wireshark上でReassembled TCP
245
+ が無くなることが分かりました。
246
+
247
+ ④ 同一パケットでbodyを送ると成功するのか
248
+
249
+ 結論から言えば、成功しました。
250
+ C#で、以下のようなコードでPOSTを行いました。
251
+ 反応が見たいだけですので、今は命令を出すところしか構築していません。
252
+
253
+ ```C#
254
+ using (var socket = new TcpClient())
255
+ {
256
+
257
+ string json = "リクエストボディ部";
258
+
259
+ socket.Connect("ip", port);
260
+ var body = Encoding.UTF8.GetBytes(json);
261
+ var bodyLength = Encoding.UTF8.GetByteCount(json);
262
+
263
+ var headerContent = new StringBuilder();
264
+ headerContent.AppendLine("POST /v1/dummy HTTP/1.1");
265
+ headerContent.AppendLine("Accept: */*");
266
+ headerContent.AppendLine("Host: " + "ip:port");
267
+ headerContent.AppendLine("Content-Type: application/json; charset=utf-8");
268
+ headerContent.AppendLine("Content-Length: " + bodyLength);
269
+ headerContent.AppendLine("Connection: Close");
270
+ headerContent.AppendLine();
271
+ headerContent.AppendLine(json);
272
+ var headerString = headerContent.ToString();
273
+ var header = Encoding.UTF8.GetBytes(headerString);
274
+ var headerLength = Encoding.UTF8.GetByteCount(headerString);
275
+
276
+ using (var stream = socket.GetStream())
277
+ {
278
+ stream.Write(header, 0, headerLength);
279
+ //stream.Write(body, 0, bodyLength);
280
+ }
281
+ }
282
+ ```
283
+
284
+ いろいろ粗が目立ちますが、ひとますこれでテストしました。
285
+ ヘッダーを自分で書いてそのまま投げるイメージです。
286
+ こうすると、末尾に無理やりJSONをつけて渡すことができます。
287
+
288
+ この方法だと、Fiddlerを介さずとも100%返信が来るようになりました。
289
+ (Wireshark上で確認)
290
+
291
+
292
+ 以上のことから、ヘッダーとボディをひとつのパケットで送り出すことが
293
+ 鍵であるようです。
294
+ (pythonだと分割しても大丈夫なようですが、c#だと駄目、というのは解せない
295
+  ですが、正常に通信できる方法が確立した後に考えたいと思います。)
296
+
297
+ 無理やりの方法は判明しましたが、可能であればhttpclientなどのライブラリを
298
+ 使いたいと考えております。
299
+
300
+ やり方をご存知の方がいましたらご教示ください。

3

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

2018/03/10 10:01

投稿

rx79bd1
rx79bd1

スコア8

title CHANGED
File without changes
body CHANGED
@@ -4,11 +4,14 @@
4
4
 
5
5
  【 解決したい課題 】
6
6
 
7
- **C#のhttpClientを利用してPOSTを行った際、パケットを見ると
7
+ **~~C#のhttpClientを利用してPOSTを行った際、パケットを見ると
8
- ヘッダーとボディーが分割されているように見える。これを同じパケットで送ることは出来ないか?**
8
+ ヘッダーとボディーが分割されているように見える。これを同じパケットで送ることは出来ないか?~~**
9
- ということがお聞きしたい内容です。
10
9
 
10
+ **pythonではpostが成功するのに、c#のhttpclientでは失敗する。何が原因なのか?**
11
11
 
12
+ ということがお聞きしたい内容です。(2018/03/08 13:49 アップデート)
13
+
14
+
12
15
  【 質問者のスキル 】
13
16
 
14
17
  プログラムを始めて1年程度です。

2

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

2018/03/08 04:50

投稿

rx79bd1
rx79bd1

スコア8

title CHANGED
File without changes
body CHANGED
@@ -155,4 +155,47 @@
155
155
  場所 origin2.ViewModels.MainWindowViewModel.<Login_test>d__5.MoveNext() 場所 C:\Users\dummy\Documents\sample_prog\test\test\ViewModels\MainWindowViewModel.cs:行 253
156
156
  InnerException:
157
157
 
158
- Wiresharkでパケット解析をしながら行ったのですが、POSTは出来てきますが、その返事がないという状況です。
158
+ Wiresharkでパケット解析をしながら行ったのですが、POSTは出来てきますが、その返事がないという状況です。
159
+
160
+ 2018/03/08 10:16 追記
161
+
162
+ 筐体の問題およびネットワークの問題なのか、プログラム言語の問題なのかを
163
+ 切り分けるため、次の作業を行いました。
164
+
165
+ 1、プロキシの確認
166
+ 2、別言語(Python)での確認
167
+
168
+ 1、についてですが、こちらは設定されておりませんでした。ただし、社内ネットワークであるため、何らかの制限がかかっている可能性は否めません。
169
+ 実際に、一部のサイトは閲覧制限がかかっているため、閲覧できないサイトもあります。
170
+
171
+ 2、1、の結果を受けて、問題の切り分けのため、別言語での検証を行いました。
172
+
173
+ 開発環境はVisualStudio2017と、Anacondaを利用したpython3.6となっています。
174
+
175
+ ```Python
176
+ import urllib.request, json
177
+
178
+ if __name__ == '__main__':
179
+ url = "http://dummy"
180
+ method = "POST"
181
+ headers = {"Content-Type" : "application/json"}
182
+
183
+ # PythonオブジェクトをJSONに変換する
184
+ obj = {"test" : "test", 123 : 123}
185
+ json_data = json.dumps(obj).encode("utf-8")
186
+
187
+ # httpリクエストを準備してPOST
188
+ request = urllib.request.Request(url, data=json_data, method=method, headers=headers)
189
+ with urllib.request.urlopen(request) as response:
190
+ response_body = response.read().decode("utf-8")
191
+
192
+ ```
193
+ JSONは適当に入力したため、正常なデータは帰ってきませんが、
194
+ 構文が違うという400(Bad Request)が帰ってきました。この後、jsonを
195
+ 正しく設定すると、必要なデータが取得できました。
196
+
197
+ このことから、ネットワーク自体に問題は無いものと思われます。
198
+
199
+ Wiresharkで確認すると、reassembled TCP、及びTCP Segmentsの項目がありました。
200
+ そのため、パケットが別れているから駄目だった、という私の考えは間違っていたことが
201
+ 判明しました。

1

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

2018/03/08 01:29

投稿

rx79bd1
rx79bd1

スコア8

title CHANGED
File without changes
body CHANGED
@@ -126,4 +126,33 @@
126
126
  今回はデモ用であるため、最悪、Fiddlerを立ち上げ、パケットキャプチャを行いながらでもOKでは
127
127
  あるのですが、可能であれば単体で動作させたいと思います。
128
128
 
129
- 以上、よろしくお願い致します。
129
+ 以上、よろしくお願い致します。
130
+
131
+ *********************************************************************************************
132
+ 以降、追記部分となります。
133
+ *********************************************************************************************
134
+
135
+ 2018/03/08 9:17 追記
136
+
137
+ 1,ファイアウォールとアンチウイルスソフトについて
138
+
139
+ 先程、開発用PCにインストールされている該当のソフトを一時的にオフにし、さらにウィンドウズのファイアウォールも
140
+ オフにしましたが、状況に変化はございませんでした。
141
+
142
+ 2,エラーメッセージの詳細
143
+
144
+ 本日あらためてトライしたところ、次のようなエラーとなりました。
145
+ **昨日と異なるエラーとなっています。**(名前等は修正してあります。)
146
+
147
+ System.Threading.Tasks.TaskCanceledException はユーザー コードによってハンドルされませんでした。
148
+ HResult=-2146233029
149
+ Message=タスクが取り消されました。
150
+ Source=mscorlib
151
+ StackTrace:
152
+ 場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
153
+ 場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
154
+ 場所 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
155
+ 場所 origin2.ViewModels.MainWindowViewModel.<Login_test>d__5.MoveNext() 場所 C:\Users\dummy\Documents\sample_prog\test\test\ViewModels\MainWindowViewModel.cs:行 253
156
+ InnerException:
157
+
158
+ Wiresharkでパケット解析をしながら行ったのですが、POSTは出来てきますが、その返事がないという状況です。