質問編集履歴
7
細部修正
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
|
-
|
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
|
-
無理やりの方法は判明しましたが、可能であれば
|
297
|
+
無理やりの方法は判明しましたが、可能であればデバッグの手間を省くため、
|
299
|
-
使いた
|
298
|
+
httpclientなどの既存ライブラリを使いたく存じます。
|
300
299
|
|
301
300
|
やり方をご存知の方がいましたらご教示ください。
|
6
誤字脱字修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -218,9 +218,9 @@
|
|
218
218
|
会社のパソコン、ネットワークはプロキシは不明です。
|
219
219
|
|
220
220
|
確認項目
|
221
|
-
0.
|
221
|
+
0. ツール(Insomnia)では返信があるか
|
222
|
-
0.
|
222
|
+
0. 自作のc#アプリでは返信があるか
|
223
|
-
0.
|
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
見づらい部分を修正しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -218,19 +218,18 @@
|
|
218
218
|
会社のパソコン、ネットワークはプロキシは不明です。
|
219
219
|
|
220
220
|
確認項目
|
221
|
-
|
221
|
+
0. 番号リストツールでは返信があるか
|
222
|
-
|
222
|
+
0. 番号リスト自作のc#アプリでは返信があるか
|
223
|
-
|
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
現在までに判明したことを追記しました。
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/
|
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
解決したい課題について更新しました。
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
別言語での成功事例について追記しました。
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
お答えいただいた内容に対して、幾つか追記を行いました。
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は出来てきますが、その返事がないという状況です。
|