0

リンク「https://mysite.sexy/sessionid?login=abc&password=abc」を介して認証する必要があり、TidHttp と TIdSSLIOHandlerSocketOpenSSL の両方を接続しました。

クエリを送信します。

http.get("https://mysite.sexy/sessionid?login=abc&password=abc");

しかし、何の応答も得られず、数秒後に「HTTP/1.1 401 Unauthorized.」という例外が発生します。

私はウェブ上で検索を行い、これらの解決策を得ました:

http.Request.UserName :=  'abc';
http.Request.Password := 'abc';
http.Request.UserAgent := 'Mozilla/5.0 (X11; U; Linux i686; cs-CZ; rv:1.7.12) Gecko/20050929';

それでもどうにもなりません。ただし、Chrome ブラウザーを介した Web サイトからの応答は例外として発生せず、エラー コードと説明を JSON 形式で取得するだけです。

{"Code":4,"Desc":"ユーザーのログインまたはパスワードが無効です"}

したがって、この応答は私が待っているものですが、例外のみを取得し、スレッドが停止します。道案内してください!デルフィXE3.

4

1 に答える 1

3

これはインディにとっては普通のことです。401 のような失敗した応答に対して例外をスローします。応答テキストに本当に関心がある場合は、例外をキャッチしてから応答テキストを確認する必要があります。(通常、応答コードだけで知る必要があることがすべてわかるため、そうではありません。) 例外が発生すると、応答テキストは例外のErrorMessageプロパティになります。

try
  x := http.get("https://mysite.sexy/sessionid?login=abc&password=abc");
except
  on E: EIdHTTPProtocolException do begin
    if E.ErrorCode = 401 then
      x := E.ErrorMessage
    else
      raise;
  end;
end;

サーバーが標準の HTTP 認証を使用していないため、リクエスト オブジェクトの認証プロパティを設定しても明らかに役に立ちません。そうでなければ、Indy は 401 応答を処理し、パスワードを含む要求を自動的に再送信します。

于 2014-02-24T13:57:11.870 に答える