問題タブ [wininet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
3203 参照

c# - C# および C++ でリダイレクト情報を取得する


私は何を間違っていますか?ユーザーの認証に使用するサーバーからリダイレクト情報を取得しようとしています。これは私の C# コードでは問題なく機能しますが、C++ コードを機能させることができません。
これが実際の C# コードです。

これらの情報を使用して、さらなる認証を行います。すべて順調。

私は今、C++ コードで同じことをしたいと思っています。しかし、そのコードは機能しません。
だからここにあります:

問題は、Location: https://myAuthServer.com/centrallogin-2.2/error.jsp適切なリダイレクトとセッションが得られないことです。request.ContentType適切に設定しないと、C# コードでもこのエラーが発生することがわかっています。しかし、C++ コードで Content-Type ヘッダーを設定しました。だから私は自分が何を間違っているのか分かりません。
さらにアイデアはありますか?
編集:
OK、WinHTTP API でも試しました。これが私のコードです:

したがって、リダイレクト URL とセッション ID は chData にある必要があります。しかし、やはり結果は間違っています。Wiresharkも試してみました。これはすべて HTTPS であるため、多くを読み取ることはできません。比較できるのは、フレーム数などだけです。WinHTTP を使用すると、Wireshark ログは似ています。したがって、これはより良いアプローチだと思います。
さらにアイデアはありますか?

0 投票する
2 に答える
3391 参照

c++ - WinInetおよびWinHTTPを使用してサーバーを呼び出す


WinInetAPIを使用すると正常に機能するリクエストがあります。WinHTTP APIを使用してそのリクエストを作成したいと思います。これは、プロジェクトですでに使用しており、単純に優れているためです。私のリクエストはJSONの呼び出しに使用されます。これを呼び出す前に、私はすでに認証しました。認証時に、Cookieを介して送信するSessionIDを取得します。
これが私の動作するWinInetコードです。

そこで、WinHTTPAPIを使用して同じことを実行したいと思います。これが私が今持っているものです:

後者の呼び出しでは、常に401を受け取りますが、最初の方法と同じように200を受け取る必要があります。INTERNET_FLAG_NO_COOKIESまた、フラグを指定しないと、最初の呼び出しで401が返されることもわかりました。したがって、Cookieヘッダーの何かが間違っているのではないかと思います。誰かが私が間違っていることを見ますか?または、2つの方法の違いは何ですか?
どうも...

0 投票する
2 に答える
2583 参照

c++ - FtpFindFirstFile の問題

そのFtpFindFirstFileとFtpGetFileに使用したいftpディレクトリからすべてのファイルをダウンロードしたい。

そのコードはエラーを返します。LPWIN32_FIND_DATA でメモリを識別していないためです。しかし、私はそれを行う方法がわかりません。

0 投票する
2 に答える
2478 参照

delphi - Soap Delphi クライアントが 1MB 呼び出しのタイムアウトで終了する

SOAP Web サービス (Apache/PHP) を開発しています。小さなサイズの呼び出しではすべて正常に動作しますが、1Mb の SOAP 呼び出し (HTTPS 呼び出しサイズは 1MB) では、Delphi Soap クライアントは 1 つを除くすべての PC でタイムアウトで停止し、PHP クライアントは default_socket_timeout=300 で正常に動作しますが、停止します。 default_socket_timeout=60 で「HTTP ヘッダーの取得エラー」が表示されます。

Delphi のタイムアウトを変更するにはどうすればよいですか? 実際、このタイムアウトは Windows XP ネットワーク ライブラリ (soaphttptrans.pas によって呼び出される wininet.dll) にあるようです。

ありがとう
セドリック

0 投票する
2 に答える
3902 参照

c++ - HttpSendRequest がサーバーから最新のファイルを取得しない

リモート ファイルがローカル ファイルと同じサイズの場合 (内容が変更されているため、変更時刻が異なっていても)、ダウンロードしようとするとすぐに返されるなど、アプリの HTTP 要求に問題があります。新しいファイルはダウンロードされません。

要するに、私が従っているプロセスは次のとおりです。INTERNET_FLAG_RESYNCHRONIZEフラグを使用して HTTP 接続を設定し、HttpSendRequest() を呼び出します。次に、HTTP ステータス コードを確認すると、「200」であることがわかります。

  • リモート ファイルが更新されても、ローカル コピーと同じサイズのままである場合: アプリの実行後、ローカル ファイルは変更されません。HttpQueryInfo()リクエストを送信した後にwithを呼び出すとHTTP_QUERY_LAST_MODIFIED、サーバーのファイルの実際の最終変更時刻が表示されます。これは、上書きしようとしているローカル ファイルとは異なることがわかります。
  • リモート ファイルが更新され、ファイル サイズがローカル コピーと異なる場合: ダウンロードされ、期待どおりにローカル コピーが上書きされます。

以下は、ヘルパーとエラー チェックを省略したかなり簡略化されたバージョンのコードです。

リモート ファイルの最終変更時刻を照会して正確であることがわかったので、実際にサーバーに到達していることがわかります。ファイルが古くなっている場合INTERNET_FLAG_RESYNCHRONIZE、指定するとファイルが強制的に再同期されると思いました。私はそれをすべて間違っていますか?これはまさにそれが機能するはずの方法ですか?


編集: パケット スニファーを使用していくつかの調査を行いました。追加情報を次に示します。

リモート ファイルとローカル ファイルがまったく同じ場合、交換は次のようになります。

ここで、リモート ファイルが変更されたが、同じファイル サイズのままである場合:

そのため、サーバーは実際にファイルが変更されたときにファイルを送信していますが、私のアプリはまだ変更されていないように見えます。問題は、アプリが応答を処理する方法にあると考えています。それは私自身のコードではなく、それを書いた人はずっと前に引っ越しました。

私が見つけた 1 つの問題は、上記の両方のシナリオで、 を呼び出すHttpQueryInfo()HTTP_QUERY_STATUS_CODE200 が返されることです。ただし、上記の最初のケースでは、実際のサーバー応答は 200 ではなく 304 であることがわかります。ファイルサイズが同じ場合、ファイルは変更されていません。したがって、私が抱えている問題です!

ですから、私の質問はもっと単純です:HttpQueryInfo()サーバーが 3XX エラーの 1 つを返しているのに、なぜ 200 を返すのでしょうか? オンラインで同様の質問をしている人を見つけましたが、回答がなかったか、Web ブラウザーを直接扱っていました。

0 投票する
2 に答える
2030 参照

delphi - HttpSendRequestの後に認証トークンを取得する

次のコードは、アプリケーションをサーバーにログインします。ログインが成功すると、そのサーバーは認証トークンを返します。そのトークンを使用して、サーバーに情報を照会する必要があります。

そのトークンを取得するにはどうすればよいですか?Cookieのクエリを試したり、InternetGetCookie()などを試したりしました。コードをいただければ幸いです

ありがとう

ジェス

編集

InternetReadFileを使用すると、そのトークンを取得できることがわかりました。ただし、そのトークンはバイトの配列として出力されます。後でサーバーに送信するために使用するのは難しいです...バイトの配列をpcharまたは文字列に変換する方法を知っている人はいますか?

0 投票する
3 に答える
1396 参照

wininet - Wion32 の HttpSendRequest : ERROR_INTERNET_INCORRECT_HANDLE_STAT

HttpSendRequest を使用して (https 経由で) URL を要求する C++ Win32 アプリがあります。以前は問題なく機能していました。しかし、エラー ERROR_INTERNET_INCORRECT_HANDLE_STATE が発生し始めました。なぜこれらのもの?何か案は?

0 投票する
2 に答える
5822 参照

windows - Windows 7 でプロキシの「設定の自動検出」を照会できません

プロキシ設定をキャプチャしようとしています (「設定を自動的に検出する」)。私のコードは XP と Vista で動作します。ただし、Windows 7 では動作しません。

対象プラットフォームの詳細をご覧ください

Windows 7 エンタープライズ、IE 8.0.7600.16385、Wininet.dll 8.0.7600.16535

コードスニペットをご覧ください

しかし、Windows 7 では、IE の [設定を自動的に検出する] オプションがオンになっていても、プログラムはそのフラグが設定されていないと言います。

以下に示すように、WinHttp APIでも試しました。

Windows 7 では、上記のコードも [設定を自動的に検出する] オプションをキャプチャできません。これに関するご意見は大歓迎です。

ありがとうジョン

0 投票する
2 に答える
891 参照

winapi - InternetOpen を呼び出すときは、どの accessType を使用すればよいですか?

MSDNによると、アクセス タイプ パラメータを InternetOpen に指定できます。dwAccessType パラメータの 2 つのオプションは次のとおりです。

INTERNET_OPEN_TYPE_DIRECT - すべてのホスト名をローカルで解決します。INTERNET_OPEN_TYPE_PRECONFIG - レジストリからプロキシまたは直接構成を取得します。

これらのうちどれを使用すればよいですか? どちらが「より良い」かはわかりません。私たちのアプリケーションは、何か巧妙なことをしたくはありません。必要なのは、通常の方法でインターネットにアクセスすることだけです。

0 投票する
3 に答える
12893 参照

delphi - WinInet を使用して Delphi 2010 で HTTP ポスト リクエストを送信する方法

WinInet を使用して Delphi 2010 で HTTP ポスト リクエストを送信したいのですが、スクリプトが機能しません。/

それは私の Delphi スクリプトです。

そして私のPHPスクリプト: