0

特定の URL にアクセスしようとしています

DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getCredentialsProvider().setCredentials(new AuthScope("abc.com", 443),
                new UsernamePasswordCredentials("user", "Passwd"));

HTTPHelper http = new HTTPHelper(httpclient);

http.get("http://abc.com/**aaa**/w/api.php?param=timestamp%7Cuser&format=xml");

ここで %7C= |

内部的に次のURLにリダイレクトしています

http://abc.com/**bbb**/w/api.php?param=timestamp%257Cuser&format=xml

そのため、正しい出力を取得できません...

| ==>%7C

%==> %25

%7C == %257C

クエリをしたいのですtimestamp|user が、循環リダイレクトのtimestamp%7Cuser ため、これを回避する方法はありますか??

独自のカスタムリダイレクト戦略も作成しました

httpclient.setRedirectStrategy(new DefaultRedirectStrategy() {
            public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) {
                boolean isRedirect = false;
                try {
                    isRedirect = super.isRedirected(request, response, context);
                    LOG.info(response.getStatusLine().getStatusCode());
                    LOG.info(request.getRequestLine().getUri().replaceAll("%25", "%"));
                } catch (ProtocolException e) {
                    e.printStackTrace();
                }
                if (!isRedirect) {
                    int responseCode = response.getStatusLine().getStatusCode();
                    if (responseCode == 301 || responseCode == 302) {
                        return true;
                    }
                }
                return isRedirect;
            }
        });

しかし、リダイレクトされた URL から %25C を %7C に置き換える方法がわかりません

4

2 に答える 2

1

サイトの URL 書き換えルールが単純に破られているようです。それがあなたのサイトでない場合は、その管理者に連絡して問題について知らせることをお勧めします。

http://abc.com/**bbb**/w/api.php?...それまでの間、リダイレクトを回避してターゲット URL (つまり ) を直接使用できない理由はありますか?

于 2012-09-22T13:05:14.590 に答える
0

うまくいきますhttp.get("http://abc.com/**aaa**/w/api.php?param=timestamp|user&format=xml"); か?

「内部で次の URL にリダイレクトする」とはどういう意味ですか? あなたのURLが再びエンコードされているようです。HTTPHelper にコードを投稿できますか? 私の以下のテストコードは正しく動作します。

クライアントコード:

HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("http://localhost:8080/test/myservlet?param=timestamp%7Cuser&format=xml");
client.execute(get);

サーブレット コード:

protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        String param = request.getParameter("param"); //get timestamp|user
        String format = request.getParameter("format");

    }
于 2012-09-21T07:41:51.973 に答える