java - 运行我的代码时连接被拒绝,这可能是与代理相关的问题。如何修复它?

标签 java twitter proxy httpclient

//This is my code for returning json response from twitter api which works fine when i am not behind any proxy server 

import oauth.signpost.OAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;

public class TwitterFeeds {

    static String AccessToken = "xxxx";
    static String AccessSecret = "xxxx";
    static String ConsumerKey = "xxxx";
    static String ConsumerSecret = "xxxx";

    public static void main(String[] args) throws Exception { 
        OAuthConsumer consumer = new CommonsHttpOAuthConsumer(ConsumerKey, ConsumerSecret);
        consumer.setTokenWithSecret(AccessToken, AccessSecret);

        HttpGet request = new     HttpGet("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=xxxx&count=2"); 

        consumer.sign(request);
        HttpClient client = new DefaultHttpClient();       
        HttpResponse response = client.execute(request);
        String json_string = EntityUtils.toString(response.getEntity());
        System.out.println(json_string);
        JSONArray  obj = new JSONArray (json_string);
        System.out.println(obj.toString());
    }
}

//我位于阻止我的请求的代理服务器后面,当我不在任何代理服务器后面时,代码可以正常工作。并且出现以下错误

Exception in thread "main" org.apache.http.conn.HttpHostConnectException: Connection to https://api.twitter.com refused
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:158)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:562)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
    at TwitterFeeds.main(TwitterFeeds.java:47)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:374)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
    ... 8 more

这是我收到的错误,显示连接被拒绝。以及用于由用户获取推文(json 格式)的代码,当我不在任何代理服务器后面时可以工作,当我在代理服务器后面时则不起作用

最佳答案

我相信您的 HttpGet 请求缺少代理设置。

您应该执行以下操作:

// Here you set your proxy host and port
HttpHost proxy = new HttpHost(<your_proxy_addess>, <port>); 
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy);
HttpClient client = HttpClients.custom().setRoutePlanner(routePlanner).build();
HttpResponse response = client.execute(request);

如果您发现有必要提供任何类型的代理凭据,则应采取以下方法:

  • 创建您的 HttpGet 请求

    HttpHost proxy = new HttpHost(<your_proxy_addess>, <port>);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
    HttpGet request = new HttpGet("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=xxxx&count=2");
    request.setConfig(config);
    
  • HttpClient 提供您的凭据:

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(
            new AuthScope(<your_proxy_addess>, <port>),
            new UsernamePasswordCredentials("user", "passwd"));
    
    HttpClient client = HttpClients.custom()
            .setDefaultCredentialsProvider(credsProvider).build();
    HttpResponse response = client.execute(request);
    

关于java - 运行我的代码时连接被拒绝,这可能是与代理相关的问题。如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36907415/

相关文章:

java - Java 语言中对数组列表进行排序

java - Twitter 获取资源号 0x00000000 的值时没有包标识符

python - 使用Python抓取Twitter位置时收到ReadTimeOut错误

时间:2019-03-17 标签:c#dynamicproxy

ruby-on-rails - 链接 Webrick 代理

Java 泛型 - 泛型方法无法编译

java - 从远程计算机(我的计算机)运行位于 Raspberry PI 上的 jar 文件

proxy - 是否可以在 PHP 连接中隐藏 IP 地址?

java - 楼梯不工作,我的代码中有错误

android - 显示 Twitter 用户的时间线