2

認証情報を必要とするネットワーク上のデバイスに http 要求を送信しようとしています。たとえば、Web ブラウザで機能するリクエストは次のようになります。

http://mylogin:myPassword@10.11.2.118/axis-cgi/virtualinput/activate.cgi?schemaversion=1&port=1

ただし、boost beast を使用してログイン情報とパスワード情報を入力する方法がわかりません。

リクエストを次のように作成します。

  // host = mylogin:myPassword@10.11.2.118 does not resolve
  // host = 10.11.2.118 resolves but I get an authentication error from the device due to no username and password
  auto results = resolver.resolve(host, port)
   ...
   //Do the connecting
   ...

  http::request<http::string_body> req{http::verb::get, path, 11};
  req.set(http::field::host, host);
  req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
  req.set(http::field::content_type, "application/json");
  req.set(http::field::accept, "vdn.dac.v1");

リクエストに使用できるフィールドはありますか?

更新: Boost Beast を使用した基本認証とダイジェスト認証をサポートする次のライブラリを見つけました: https://github.com/RAvenGEr/simple-beast-client。そのライブラリを使用して、上記の URL へのリクエストを実行できます。しかし、それは私が望むよりも複雑です。

更新: 認証を処理する libcurl の使用に切り替えます (指定した URL を直接入力して、Digest 認証を許可することができます)。

4

2 に答える 2

1
http::request<http::string_body> req; // defaults to HTTP/1.1
req.method(http::verb::get);
req.target("mylogin:myPassword@10.11.2.118/axis-cgi/virtualinput/activate.cgi?schemaversion=1&port=1");
...
于 2019-09-18T01:58:31.760 に答える