2011-02-17 116 views
37

如何使HTTPClient使用自定義User-Agent頭?如何設置自定義用戶代理與Apache HTTP客戶端庫4.1?

以下代碼提交空的用戶代理。我錯過了什麼?

import java.io.IOException; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.params.CoreProtocolPNames; 
import org.apache.http.protocol.BasicHttpContext; 
import org.apache.http.protocol.HttpContext; 
import org.apache.http.util.EntityUtils; 

public class TestHTTP { 

     public static void main(String[] args) throws ClientProtocolException, IOException { 
     HttpGet request = new HttpGet("http://tool.keepmeapi.com/echo"); 

     HttpContext HTTP_CONTEXT = new BasicHttpContext(); 
     HTTP_CONTEXT.setAttribute(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13"); 
     request.setHeader("Referer", "http://www.google.com"); 

     HttpClient httpClient = new DefaultHttpClient(); 
     HttpResponse response = httpClient.execute(request, HTTP_CONTEXT); 

     if (response.getStatusLine().getStatusCode() < 200 || response.getStatusLine().getStatusCode() >= 400) { 
      throw new IOException("Got bad response, error code = " + response.getStatusLine().getStatusCode()); 
     } 

     HttpEntity entity = response.getEntity(); 
     if (entity != null) { 
      System.out.println(EntityUtils.toString(entity)); 
      EntityUtils.consume(entity); 
     } 
    } 

} 

回答

51

request.setHeader("User-Agent", "MySuperUserAgent");

丟失。添加並享受。

+0

這麼簡單.. 。:)我不知道CoreProtocolPNames.USER_AGENT是什麼? – 2011-02-17 10:26:18

+0

我不知道。我沒有這個班,但可能它只是一個不斷的「用戶代理」? – AlexR 2011-02-17 10:29:02

48

您還可以設置一個全球性的用戶代理值,而不是每個請求:

String userAgent = "NewUseAgent/1.0"; 
HttpClient httpClient = new DefaultHttpClient(); 
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, userAgent); 
29

隨着httpcomponents 4.3,你應該使用客戶端生成器來設置用戶代理:

HttpClient httpClient = HttpClients.custom() 
          .setUserAgent("my UserAgent 5.0") 
          .build(); 

httpClient.execute(new HttpGet("http://www.google.de"));