问题描述
我想从我的 Android 应用中请求一个带有 GET 参数的 URL 并读取响应.在请求中,我必须添加一个 x-zip 标头.
From my Android app I want to request a URL with GET parameters and read the response. In the request I must add a x-zip header.
网址类似于
http://example.com/getmethod.aspx?id=111&method=Test
谁能提供我的代码?
有两点很重要:它是一个 GET 请求并包含 x-zip 标头.
Two things are important: that it is a GET request and contains the x-zip header .
try { HttpClient client = new DefaultHttpClient(); String getURL = "http://example.com/getmethod.aspx?id=111&method=Test"; HttpGet get = new HttpGet(getURL); get.setHeader("Content-Type", "application/x-zip"); HttpResponse responseGet = client.execute(get); HttpEntity resEntityGet = responseGet.getEntity(); if (resEntityGet != null) { //do something with the response Log.i("GET ",EntityUtils.toString(resEntityGet)); } } catch (Exception e) { e.printStackTrace(); }
我尝试使用此代码,但得到的代码带有 .net 错误:Object reference not set to an instance of an object...我想,但我不确定如果 x-zip 标头,我的代码中的标头可以吗?
I try with this code but I get code with .net error: Object reference not set to an instance of an object... I think but I'm not sure this if for x-zip header, is header in my code ok?
推荐答案
这是我们在应用程序中用于设置请求标头的代码摘录.您会注意到我们只在 POST 或 PUT 上设置 CONTENT_TYPE 标头,但添加标头的一般方法(通过请求拦截器)也用于 GET.
Here's a code excerpt we're using in our app to set request headers. You'll note we set the CONTENT_TYPE header only on a POST or PUT, but the general method of adding headers (via a request interceptor) is used for GET as well.
/** * HTTP request types */ public static final int POST_TYPE = 1; public static final int GET_TYPE = 2; public static final int PUT_TYPE = 3; public static final int DELETE_TYPE = 4; /** * HTTP request header constants */ public static final String CONTENT_TYPE = "Content-Type"; public static final String ACCEPT_ENCODING = "Accept-Encoding"; public static final String CONTENT_ENCODING = "Content-Encoding"; public static final String ENCODING_GZIP = "gzip"; public static final String MIME_FORM_ENCODED = "application/x-www-form-urlencoded"; public static final String MIME_TEXT_PLAIN = "text/plain"; private InputStream performRequest(final String contentType, final String url, final String user, final String pass, final Map<String, String> headers, final Map<String, String> params, final int requestType) throws IOException { DefaultHttpClient client = HTTPClientFactory.newClient(); client.getParams().setParameter(HttpProtocolParams.USER_AGENT, mUserAgent); // add user and pass to client credentials if present if ((user != null) && (pass != null)) { client.getCredentialsProvider().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(user, pass)); } // process headers using request interceptor final Map<String, String> sendHeaders = new HashMap<String, String>(); if ((headers != null) && (headers.size() > 0)) { sendHeaders.putAll(headers); } if (requestType == HTTPRequestHelper.POST_TYPE || requestType == HTTPRequestHelper.PUT_TYPE ) { sendHeaders.put(HTTPRequestHelper.CONTENT_TYPE, contentType); } // request gzip encoding for response sendHeaders.put(HTTPRequestHelper.ACCEPT_ENCODING, HTTPRequestHelper.ENCODING_GZIP); if (sendHeaders.size() > 0) { client.addRequestInterceptor(new HttpRequestInterceptor() { public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException { for (String key : sendHeaders.keySet()) { if (!request.containsHeader(key)) { request.addHeader(key, sendHeaders.get(key)); } } } }); } //.... code omitted ....// }