12

HttpClient を使用して奇妙な問題が発生しています。HttpPost で DefaultHttpClient() を使用しています。私は100%の成功でHttpGetを使用していましたが、使用しているREST APIがGETではなくPOSTパラメーターを必要とするため、HttpPostに切り替えようとしています。(ただし、一部の API 呼び出しに対してのみ、GET 呼び出しが正常に機能していたことを知っているため、API の障害ではありません)。

また、私が書いた単純なphpスクリプトでHttpPostを使用して、POSTパラメーター「var」を探して画面にエコーし、次のようにこのパラメーターを渡してみました。

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

    postMethod = new HttpPost("http://www.examplewebsite.com");

    nameValuePairs.add(new BasicNameValuePair("var", "lol"));

    try {
        postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        response = httpClient.execute(postMethod, responseHandler);
        Log.i("RESTMethod", response);
...

問題は、API に対して同じ呼び出しを試みたときに (ただし、パラメーターが明らかに API パラメーターに変更された状態で)、次のエラーが発生することです。

Authentication error: Unable to respond to any of these challenges: {}

リクエストしているページは HTTPS ページですが、これが問題になる可能性はありますか?

しかし、API で生の HTTP ページに対して同じタイプの POST 要求を実行すると、StringEntity 部分をコメントアウトしてから実行しない限り、同じエラーが発生します (ただし、xml が返され、JSON でデータを要求するパラメーターを渡したい)。 .

これは本当に奇妙な問題 (https 以外の部分) のように思えますが、この問題に関するヘルプを実際に見つけることができなかったので、答えがあれば申し訳ありません。

何か案は?

前もって感謝します、

インフィニティフズ

編集: さて、私はどこにも行きませんので、API に案内した場合、それはいくつかの光を当てるかもしれないと思いました.8Tracks APIであり、ご覧のとおり、すべてのリクエストに対して開発キー (api_key) を渡す必要があります。 https を使用してユーザーをログインさせることにこだわっています: http://www.8tracks.com/sessions.xml " の部分。

私は行き止まりにいるので、これが何らかの形で役立つことを願っています。

ありがとう、

インフィニティフィズ

4

4 に答える 4

13

認証エラー:これらの課題のいずれにも対応できません:{}

このエラーメッセージは、サーバーが401 (Unauthorized)ステータスコードで応答したが、単一の認証チャレンジ(WWW-Authenticateヘッダー)を提供できなかったため、HttpClientが認証の失敗から自動的に回復できないことを意味します。

ほとんどの場合、アプリケーションは、HTTPPOSTリクエストで囲まれたHTMLフォームのいくつかのソフトクレデンシャルを期待しています。

于 2011-05-25T13:55:56.233 に答える
3

ポートとプロトコルを宣言する必要はありませんか?私はこのコードを盗んでいるだけなので、すぐに正しくコンパイルされなくても動揺しないでください。また、私は通常UsernamePasswordCredentialsをsetCredentials()に提供しますが、同じだと思います。

HttpHost host = new HttpHost("www.foo.com", 443, "https");

// assemble your GET or POST

client.getCredentialsProvider().setCredentials(new AuthScope(host.getHostName(), host.getPort()));

HttpResponse response = client.execute(host, [HttpPost or HttpGet]);

setCredentialsの詳細については、こちらをご覧ください。

于 2011-05-24T19:03:26.127 に答える
3

これが私が同様の問題に終わった方法です:

DefaultHttpClient client = new DefaultHttpClient();
client.getCredentialsProvider().setCredentials(AuthScope.ANY,
            new UsernamePasswordCredentials(username, password));

正しい方向に向けてくれたライアンに感謝します。

于 2012-01-25T18:54:07.723 に答える
1

Twitter アプリのコールバック URLを指定しないと、同じエラーが発生しました。

Authentication error: Unable to respond to any of these challenges: {oauth=WWW-Authenticate: OAuth realm="https://api.twitter.com"}

Twitter にコールバック URL を設定すると問題が解決しました

于 2012-03-11T00:25:30.947 に答える