Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用apache http客户端库4.1设置自定义用户代理?_Java_User Agent_Apache Httpclient 4.x - Fatal编程技术网

Java 如何使用apache http客户端库4.1设置自定义用户代理?

Java 如何使用apache http客户端库4.1设置自定义用户代理?,java,user-agent,apache-httpclient-4.x,Java,User Agent,Apache Httpclient 4.x,如何使HTTPClient使用自定义用户代理头 以下代码提交空的用户代理。我错过了什么 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 o

如何使HTTPClient使用自定义用户代理头

以下代码提交空的用户代理。我错过了什么

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

}
import java.io.IOException;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.params.CoreProtocolPNames;
导入org.apache.http.protocol.BasicHttpContext;
导入org.apache.http.protocol.HttpContext;
导入org.apache.http.util.EntityUtils;
公共类TestHTTP{
公共静态void main(字符串[]args)抛出ClientProtocolException,IOException{
HttpGet请求=新建HttpGet(“http://tool.keepmeapi.com/echo");
HttpContext HTTP_CONTEXT=new BasicHttpContext();
HTTP_CONTEXT.setAttribute(CoreProtocolPNames.USER_代理,“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=新的DefaultHttpClient();
HttpResponse response=httpClient.execute(请求,HTTP_上下文);
if(response.getStatusLine().getStatusCode()<200 | | response.getStatusLine().getStatusCode()>=400){
抛出新IOException(“获得错误响应,错误代码=“+response.getStatusLine().getStatusCode());
}
HttpEntity=response.getEntity();
如果(实体!=null){
System.out.println(EntityUtils.toString(entity));
EntityUtils.consume(实体);
}
}
}

注意:该解决方案适用于使用旧的httpcomponents 4.2及之前版本的用户

线路

request.setHeader(“用户代理”、“MySuperUserAgent”)


他失踪了。添加它并享受。

注意:从httpcomponents 4.3开始,此解决方案已被弃用

您还可以设置全局用户代理值,而不是每个请求:

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

对于httpcomponents 4.3,应使用客户端生成器设置用户代理:

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

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

这么简单…:)我想知道CoreProtocolPNames.USER_代理的作用是什么?我不知道。我没有这个类,但它可能只是一个常量“用户代理”?@AlexR:CoreProtocolPNames.User_代理应该与org.apache.http.params.HttpParams一起使用,以配置您的httpClient,在您的情况下,它是DefaultHttpClient。因此,您可以将用户代理作为DefaultHttpClient构造函数的第二个参数传递,或通过serDefaultHttpParams传递。对于使用httpcomponents 4.3及以上版本的用户,请向下滚动至@MrSpock答案。您可以在HttpClient上设置用户代理。我使用
HTTP.user\u agent
作为参数名。虽然不确定哪一个是首选。
CoreProtocolPNames.USER\u AGENT
是唯一可以工作的。HTTP.USER_代理只是HTTP头本身的名称,而不是我们发送给httpclient的属性的名称。Apache的文档称CoreProtocolPNames.USER_代理已被弃用。应该用什么来代替?您应该使用HttpProtocolParams.setUserAgentI尝试在不同版本的ApacheLibrary中更改参数,但从未奏效。更好的方法是使用“yourrequest.addHeader”(“用户代理”,“YourApp/x.x”)”