問題タブ [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.
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 ログは似ています。したがって、これはより良いアプローチだと思います。
さらにアイデアはありますか?
c++ - WinInetおよびWinHTTPを使用してサーバーを呼び出す
WinInetAPIを使用すると正常に機能するリクエストがあります。WinHTTP APIを使用してそのリクエストを作成したいと思います。これは、プロジェクトですでに使用しており、単純に優れているためです。私のリクエストはJSONの呼び出しに使用されます。これを呼び出す前に、私はすでに認証しました。認証時に、Cookieを介して送信するSessionIDを取得します。
これが私の動作するWinInetコードです。
そこで、WinHTTPAPIを使用して同じことを実行したいと思います。これが私が今持っているものです:
後者の呼び出しでは、常に401を受け取りますが、最初の方法と同じように200を受け取る必要があります。INTERNET_FLAG_NO_COOKIES
また、フラグを指定しないと、最初の呼び出しで401が返されることもわかりました。したがって、Cookieヘッダーの何かが間違っているのではないかと思います。誰かが私が間違っていることを見ますか?または、2つの方法の違いは何ですか?
どうも...
c++ - FtpFindFirstFile の問題
そのFtpFindFirstFileとFtpGetFileに使用したいftpディレクトリからすべてのファイルをダウンロードしたい。
そのコードはエラーを返します。LPWIN32_FIND_DATA でメモリを識別していないためです。しかし、私はそれを行う方法がわかりません。
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) にあるようです。
ありがとう
セドリック
c++ - HttpSendRequest がサーバーから最新のファイルを取得しない
リモート ファイルがローカル ファイルと同じサイズの場合 (内容が変更されているため、変更時刻が異なっていても)、ダウンロードしようとするとすぐに返されるなど、アプリの HTTP 要求に問題があります。新しいファイルはダウンロードされません。
要するに、私が従っているプロセスは次のとおりです。INTERNET_FLAG_RESYNCHRONIZE
フラグを使用して HTTP 接続を設定し、HttpSendRequest() を呼び出します。次に、HTTP ステータス コードを確認すると、「200」であることがわかります。
- リモート ファイルが更新されても、ローカル コピーと同じサイズのままである場合: アプリの実行後、ローカル ファイルは変更されません。
HttpQueryInfo()
リクエストを送信した後にwithを呼び出すとHTTP_QUERY_LAST_MODIFIED
、サーバーのファイルの実際の最終変更時刻が表示されます。これは、上書きしようとしているローカル ファイルとは異なることがわかります。 - リモート ファイルが更新され、ファイル サイズがローカル コピーと異なる場合: ダウンロードされ、期待どおりにローカル コピーが上書きされます。
以下は、ヘルパーとエラー チェックを省略したかなり簡略化されたバージョンのコードです。
リモート ファイルの最終変更時刻を照会して正確であることがわかったので、実際にサーバーに到達していることがわかります。ファイルが古くなっている場合INTERNET_FLAG_RESYNCHRONIZE
、指定するとファイルが強制的に再同期されると思いました。私はそれをすべて間違っていますか?これはまさにそれが機能するはずの方法ですか?
編集: パケット スニファーを使用していくつかの調査を行いました。追加情報を次に示します。
リモート ファイルとローカル ファイルがまったく同じ場合、交換は次のようになります。
ここで、リモート ファイルが変更されたが、同じファイル サイズのままである場合:
そのため、サーバーは実際にファイルが変更されたときにファイルを送信していますが、私のアプリはまだ変更されていないように見えます。問題は、アプリが応答を処理する方法にあると考えています。それは私自身のコードではなく、それを書いた人はずっと前に引っ越しました。
私が見つけた 1 つの問題は、上記の両方のシナリオで、 を呼び出すHttpQueryInfo()
とHTTP_QUERY_STATUS_CODE
200 が返されることです。ただし、上記の最初のケースでは、実際のサーバー応答は 200 ではなく 304 であることがわかります。ファイルサイズが同じ場合、ファイルは変更されていません。したがって、私が抱えている問題です!
ですから、私の質問はもっと単純です:HttpQueryInfo()
サーバーが 3XX エラーの 1 つを返しているのに、なぜ 200 を返すのでしょうか? オンラインで同様の質問をしている人を見つけましたが、回答がなかったか、Web ブラウザーを直接扱っていました。
delphi - HttpSendRequestの後に認証トークンを取得する
次のコードは、アプリケーションをサーバーにログインします。ログインが成功すると、そのサーバーは認証トークンを返します。そのトークンを使用して、サーバーに情報を照会する必要があります。
そのトークンを取得するにはどうすればよいですか?Cookieのクエリを試したり、InternetGetCookie()などを試したりしました。コードをいただければ幸いです
ありがとう
ジェス
編集
InternetReadFileを使用すると、そのトークンを取得できることがわかりました。ただし、そのトークンはバイトの配列として出力されます。後でサーバーに送信するために使用するのは難しいです...バイトの配列をpcharまたは文字列に変換する方法を知っている人はいますか?
wininet - Wion32 の HttpSendRequest : ERROR_INTERNET_INCORRECT_HANDLE_STAT
HttpSendRequest を使用して (https 経由で) URL を要求する C++ Win32 アプリがあります。以前は問題なく機能していました。しかし、エラー ERROR_INTERNET_INCORRECT_HANDLE_STATE が発生し始めました。なぜこれらのもの?何か案は?
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 では、上記のコードも [設定を自動的に検出する] オプションをキャプチャできません。これに関するご意見は大歓迎です。
ありがとうジョン
winapi - InternetOpen を呼び出すときは、どの accessType を使用すればよいですか?
MSDNによると、アクセス タイプ パラメータを InternetOpen に指定できます。dwAccessType パラメータの 2 つのオプションは次のとおりです。
INTERNET_OPEN_TYPE_DIRECT - すべてのホスト名をローカルで解決します。INTERNET_OPEN_TYPE_PRECONFIG - レジストリからプロキシまたは直接構成を取得します。
これらのうちどれを使用すればよいですか? どちらが「より良い」かはわかりません。私たちのアプリケーションは、何か巧妙なことをしたくはありません。必要なのは、通常の方法でインターネットにアクセスすることだけです。
delphi - WinInet を使用して Delphi 2010 で HTTP ポスト リクエストを送信する方法
WinInet を使用して Delphi 2010 で HTTP ポスト リクエストを送信したいのですが、スクリプトが機能しません。/
それは私の Delphi スクリプトです。
そして私のPHPスクリプト: