web-dev-qa-db-fra.com

Envoyer une requête HTTP GET avec en-tête

De mon Android je souhaite demander une URL avec des paramètres GET et lire la réponse. Dans la demande, je dois ajouter un x-Zip entête.

L'URL est quelque chose comme

http://example.com/getmethod.aspx?id=111&method=Test

Quelqu'un peut-il me fournir du code pour cela?

Deux choses sont importantes: c'est une requête GET et contient le x-Zip entête .

ÉDITER:

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();
}

J'essaie avec ce code mais j'obtiens du code avec une erreur .net: Object reference not set to an instance of an object... Je pense mais je ne suis pas sûr que ce soit pour x-Zip en-tête, est-ce que l'en-tête dans mon code est ok?

14
Jovan

Voici un extrait de code que nous utilisons dans notre application pour définir les en-têtes de demande. Vous remarquerez que nous définissons l'en-tête CONTENT_TYPE uniquement sur un POST ou PUT, mais la méthode générale d'ajout d'en-têtes (via un intercepteur de demande) est également utilisée pour GET.

/**
 * 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 ....//

}
11
mportuesisf

Vous le faites exactement comme vous l'avez montré avec cette ligne:

get.setHeader("Content-Type", "application/x-Zip");

Votre en-tête est donc correct et le problème vient d'une autre entrée du service Web. Vous voudrez déboguer cela du côté serveur.

7
vipw