//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());
}
}
// I am behind a proxy server which is blocking my request, the code works fine when i am not behind any proxy server.And getting following error
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
This is error which i ma getting showing connection refused. and the code for getting tweets(json format) by user and works when i am not behind any proxy server and does not work when i am behind proxy server
2
Answers
I believe that your
HttpGet
request is missing your proxy settings.You should do the following:
If you see that’s necessary to provide any type of proxy credentials, then the following approach should be taken:
Create your
HttpGet
requestProvide your credentials to your
HttpClient
:I think you’re on the right track with the proxy error.
In java, there is at least 2-3 ways to “bypass” the proxy. Each of them have they advantages and inconvenients :
By doing this, all HTTP connections are affected by this settings. You can have a more slightly dynamic method by following the next point.
Like the method above, you can set and unset properties to the JVM but now directly in the code like so.
This is a great solution if you want to keep everything simple and if your application isn’t multi-thread. Like I said before, properties are set for all the JVM.
This solution is more flexible than the two other one.
Note: for HTTPS, simply use
Proxy.Type.HTTPS
. For the other methods, usehttps.proxyPort
instead ofhttp.proxyPort
(for example)