如何向正文发送HTTP GET?

时间:2013-12-12 17:56:58

标签: java servlets

Boss希望我们在正文中发送带有参数的HTTP GET。我无法弄清楚如何使用org.apache.commons.httpclient.methods.GetMethod或java.net.HttpURLConnection;来做到这一点。

GetMethod似乎没有任何参数,我不知道如何使用HttpURLConnection。

3 个答案:

答案 0 :(得分:2)

HTTP GET方法永远不应该有一个正文部分。您可以使用URL查询字符串或HTTP标头传递参数。

如果你想要一个BODY部分。使用POST或其他方法。

答案 1 :(得分:2)

您可以扩展HttpEntityEnclosingRequestBase类以覆盖继承的org.apache.http.client.methods.HttpRequestBase.getMethod()但事实上HTTP GET不支持正文请求,并且您可能会遇到一些HTTP服务器的问题,使用风险自负:)

public class MyHttpGetWithEntity扩展HttpEntityEnclosingRequestBase {     public final static String GET_METHOD =“GET”;

public MyHttpGetWithEntity(final URI uri) {
    super();
    setURI(uri);
}

public MyHttpGetWithEntity(final String uri) {
    super();
    setURI(URI.create(uri));
}

@Override
public String getMethod() {
    return GET_METHOD;
}

}

然后

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;

public class HttpEntityGet {

    public static void main(String[] args) {

        try {
            HttpClient client = new DefaultHttpClient();
            MyHttpGetWithEntity e = new MyHttpGetWithEntity("http://....");
            e.setEntity(new StringEntity("mystringentity"));
            HttpResponse response = client.execute(e);
            System.out.println(IOUtils.toString(response.getEntity().getContent()));
        } catch (Exception e) {
            System.err.println(e);
        }
    }
} 

答案 2 :(得分:-1)

HTTP GET方法没有正文部分。我认为您可以将数据转换为查询字符串参数,并将它们传递给服务器。最好使用POST。

旁注: -

如果您正在使用POST,那么您可以这样做:

HttpClient client= new DefaultHttpClient();
HttpPost request = new HttpPost("url link");

List<NameValuePair> p= new ArrayList<NameValuePair>();
p.add(new BasicNameValuePair("parameterName", "parameterValue"));

client.setEntity(new UrlEncodedFormEntity(p));
HttpResponse resp = client.execute(req);