質問: recv(dstSocket, buf, BUF_LEN, 0); if (read_size > 0) { printf("%s", buf); } else { break; } } closesocket(dstSocket); WSACleanup(); return 0; } ``` ### 試したこと 1.APIの動作確認(問題なし) プログラムが間違えているのか、APIサーバーに問題があるのか確かめるためにPOSTMANを使用してプログラムと同じアドレス、jsonでAPIを叩いたところ問題なくトークンが取得できました。 2.通信内容の比較(問題あり) POSTMANを使用した際と、プログラムを使用した際に通信の内容がどのように異なっているのかをWiresharkを使用して確かめてみました。 POSTMANを使用した場合、WiresharkにJavaScript Object Notation: application/jsonという項目があり、展開すると送信したJSONデータが表示されます。 それに対して、作成したプログラムでは、JavaScript Object Notationの項目が表示されません。 というより、POSTMANで成功した場合には、ProtocolがHTTPのもので、Info部分にPOST /{path}/auth HTTP/1.1 (application/json)と記載されているパケット(?行の事)がありましたが、プログラムで作成したものに関しては全てTCPでした。 そもそも、リクエストが送信されていないのでしょうか? 個人的には、リクエストヘッダに"Content-Type: application/json"を入れて、bodyにjsonデータを入れればうまくいくといった認識でしたが、違うのでしょうか? ### 最後に 何か必要な情報等ありましたら、回答をお願いします。 質問を書きながらHTTPプロトコルの生成はしていますが、送信ができていないのでは?と思うところがありますが、具体的にどうすればよいかわからない状況です。 お力をお貸しください。 よろしくお願いします。
回答: こんにちは。 折角WireSharkでみているのでしたら、バイナリの部分を見比べたら相違がある筈です。その相違をなくせば通る筈ですよ。 httpのこのレベルのプロトコルには詳しくないのですが、リクエストをパケット分割する際には分割されていることがサーバ側で分からないと解析のしようがない筈です。ですが、それっぽいデータは付いていないように見えます。 このリクエストは1パケットで十分に送れそうですから、1回のsendで全て送ってみてはどうでしょう?