【问题标题】:Is there a Java package to handle building URLs?是否有用于处理构建 URL 的 Java 包?
【发布时间】:2010-12-24 02:44:30
【问题描述】:

我正在寻找的是 Java 中的一些代码,它将采用 Map 对象并将其转换为可以附加到我返回的 URL 的查询字符串。我敢肯定有一个图书馆可以做到这一点以及更多,但我无法通过快速谷歌搜索找到它。有人知道会这样做吗?

【问题讨论】:

标签: java url


【解决方案1】:

我发现apache httpcomponents 是一个可靠且通用的库,用于处理 Java 中的 HTTP。但是,这里有一个示例类,它可能足以构建 URL 查询字符串:

import java.net.URLEncoder;

public class QueryString {

    private String query = "";

    public QueryString(HashMap<String, String> map) {
        Iterator it = mp.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pairs = (Map.Entry)it.next();
            query += URLEncoder.encode(pairs.getKey(), "utf-8") + "=" +
            URLEncoder.encode(pairs.getValue(), "utf-8");
            if (it.hasNext()) { query += "&"; }
        }
    }

    public QueryString(Object name, Object value) {
        query = URLEncoder.encode(name.toString(), "utf-8") + "=" +
            URLEncoder.encode(value.toString(), "utf-8");
    }

    public QueryString() { query = ""; }

    public synchronized void add(Object name, Object value) {
        if (!query.trim().equals("")) query += "&";
        query += URLEncoder.encode(name.toString(), "utf-8") + "=" +
            URLEncoder.encode(value.toString(), "utf-8");
    }

    public String toString() { return query; }
}

用法:

HashMap<String, String> map = new HashMap<String, String>();
map.put("hello", "world");
map.put("lang", "en");

QueryString q = new QueryString(map);
System.out.println(q);
// => "hello=world&lang=en"

【讨论】:

  • 看起来不错!但是,我强烈建议您在代码中使用泛型!
  • 我会接受这一点,但是 URLEncoder.encode(String s) 方法已被弃用,取而代之的是采用格式参数的方法。除此之外,这很棒,谢谢。
  • @miku HttpComponents 中有一个类可以完成您的代码的工作吗?
【解决方案2】:

Apache Http Compoments(HttpClient 4)尝试URIBuilder

它实际上不需要映射,但非常适合构建 URI。

【讨论】:

    【解决方案3】:

    网上有this,所以你可以随便拨打:

    InputStream serverInput = post(URL url, Map parameters); 
    InputStream serverInput = post(URL url, Map parameters); 
    InputStream serverInput = post(URL url, Map cookies, Map parameters); 
    InputStream serverInput = post(URL url, String[] cookies, Object[] parameters); 
    InputStream serverInput = post(URL url, Object[] parameters).
    

    他也提供了源代码。

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2016-11-03
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      相关资源
      最近更新 更多