public class URLConnectionHttpClient extends java.lang.Object implements Twitter.IHttpClient, java.io.Serializable, java.lang.Cloneable
Provides Twitter-focused error-handling, generating the right
TwitterException. Also has a retry-on-error mode which can help smooth out
Twitter's sometimes intermittent service. See
setRetryOnError(boolean)
.
Modifier and Type | Field and Description |
---|---|
protected java.lang.String |
name |
protected int |
timeout |
Constructor and Description |
---|
URLConnectionHttpClient() |
URLConnectionHttpClient(java.lang.String name,
java.lang.String password) |
Modifier and Type | Method and Description |
---|---|
boolean |
canAuthenticate()
Whether this client is setup to do authentication when contacting the
Twitter server.
|
protected java.lang.String |
checkRateLimit(java.lang.String url) |
URLConnectionHttpClient |
clone()
Identical to
copy() |
java.net.HttpURLConnection |
connect(java.lang.String url,
java.util.Map<java.lang.String,java.lang.String> vars,
boolean authenticate)
Lower-level GET method.
|
Twitter.IHttpClient |
copy() |
java.lang.String |
delete(java.lang.String uri,
boolean authenticate)
Send an HTTP DELETE request and return the response body.
|
protected void |
disconnect(java.net.HttpURLConnection connection) |
java.lang.String |
getHeader(java.lang.String headerName)
Fetch a header from the last http request.
|
java.lang.String |
getPage(java.lang.String url,
java.util.Map<java.lang.String,java.lang.String> vars,
boolean authenticate)
Send an HTTP GET request and return the response body.
|
RateLimit |
getRateLimit(Twitter.KRequestType reqType) |
java.util.Map<java.lang.String,RateLimit> |
getRateLimits() |
boolean |
isRetryOnError()
If true, will wait 1/2 second and make a 2nd request when presented with
a server error (E50X).
|
java.lang.String |
post(java.lang.String uri,
java.util.Map<java.lang.String,java.lang.String> vars,
boolean authenticate)
Send an HTTP POST request and return the response body.
|
java.net.HttpURLConnection |
post2_connect(java.lang.String uri,
com.winterwell.json.JSONObject body)
Lower-level POST method - stringifies JSON body instead of encoding vars
|
java.net.HttpURLConnection |
post2_connect(java.lang.String uri,
java.util.Map<java.lang.String,java.lang.String> vars)
Lower-level POST method.
|
java.net.HttpURLConnection |
post2_connect(java.lang.String uri,
java.lang.String payload)
Lower-level POST method - takes raw string for body
|
protected java.lang.String |
post2_getPayload(java.util.Map<java.lang.String,java.lang.String> vars) |
java.lang.String |
postJSON(java.lang.String uri,
com.winterwell.json.JSONObject body,
boolean authenticate) |
protected void |
processHeaders(java.net.HttpURLConnection connection,
java.lang.String resource)
Cache headers for
getHeader(String) |
protected void |
setAuthentication(java.net.URLConnection connection)
Set a header for basic authentication login.
|
void |
setGzip(boolean gzip)
Set whether or not to request gzipped responses.
|
URLConnectionHttpClient |
setHtmlImpliesError(boolean htmlImpliesError) |
void |
setMinRateLimit(int minRateLimit)
Use this to protect your Twitter API rate-limit.
|
void |
setRetryOnError(boolean retryOnError)
False by default.
|
void |
setTimeout(int millisecs)
Set the timeout for a single get/post request.
|
java.lang.String |
toString() |
java.util.Map<java.lang.String,RateLimit> |
updateRateLimits()
Call Twitter to get the rate limit.
|
public URLConnectionHttpClient()
public URLConnectionHttpClient(java.lang.String name, java.lang.String password)
public boolean isRetryOnError()
Twitter.IHttpClient
isRetryOnError
in interface Twitter.IHttpClient
public void setGzip(boolean gzip)
public URLConnectionHttpClient setHtmlImpliesError(boolean htmlImpliesError)
htmlImpliesError
- default is true. If true, an html response will
be treated as a server error & generate a TwitterException.E50Xpublic boolean canAuthenticate()
Twitter.IHttpClient
Twitter_Account.verifyCredentials()
if you need to check a
login.canAuthenticate
in interface Twitter.IHttpClient
public java.net.HttpURLConnection connect(java.lang.String url, java.util.Map<java.lang.String,java.lang.String> vars, boolean authenticate) throws java.io.IOException
Twitter.IHttpClient
connect
in interface Twitter.IHttpClient
java.io.IOException
public Twitter.IHttpClient copy()
copy
in interface Twitter.IHttpClient
public URLConnectionHttpClient clone()
copy()
clone
in class java.lang.Object
protected final void disconnect(java.net.HttpURLConnection connection)
public java.lang.String getHeader(java.lang.String headerName)
Twitter.IHttpClient
getHeader
in interface Twitter.IHttpClient
public java.util.Map<java.lang.String,RateLimit> getRateLimits()
getRateLimits
in interface Twitter.IHttpClient
public java.util.Map<java.lang.String,RateLimit> updateRateLimits()
public final java.lang.String getPage(java.lang.String url, java.util.Map<java.lang.String,java.lang.String> vars, boolean authenticate) throws TwitterException
Twitter.IHttpClient
getPage
in interface Twitter.IHttpClient
url
- The uri to fetchvars
- get arguments to add to the uriauthenticate
- If true, use authentication. The authentication method
used depends on the implementation (basic-auth, OAuth). It
is an error to use true if no authentication details have
been set.TwitterException
- for a variety of reasonsTwitterException.E404
- for resource-does-not-exist errorspublic RateLimit getRateLimit(Twitter.KRequestType reqType)
getRateLimit
in interface Twitter.IHttpClient
Twitter.IHttpClient.getRateLimits()
public final java.lang.String post(java.lang.String uri, java.util.Map<java.lang.String,java.lang.String> vars, boolean authenticate) throws TwitterException
Twitter.IHttpClient
post
in interface Twitter.IHttpClient
uri
- The uri to post to.vars
- The form variables to send. These are URL encoded before
sending.authenticate
- If true, send user authenticationTwitterException
- for a variety of reasonsTwitterException.E404
- for resource-does-not-exist errorspublic final java.lang.String postJSON(java.lang.String uri, com.winterwell.json.JSONObject body, boolean authenticate)
postJSON
in interface Twitter.IHttpClient
public java.net.HttpURLConnection post2_connect(java.lang.String uri, java.util.Map<java.lang.String,java.lang.String> vars) throws java.lang.Exception
Twitter.IHttpClient
post2_connect
in interface Twitter.IHttpClient
TwitterException
java.lang.Exception
public java.net.HttpURLConnection post2_connect(java.lang.String uri, com.winterwell.json.JSONObject body) throws java.lang.Exception
Twitter.IHttpClient
post2_connect
in interface Twitter.IHttpClient
TwitterException
java.lang.Exception
public java.net.HttpURLConnection post2_connect(java.lang.String uri, java.lang.String payload) throws java.lang.Exception
Twitter.IHttpClient
post2_connect
in interface Twitter.IHttpClient
TwitterException
java.lang.Exception
protected java.lang.String checkRateLimit(java.lang.String url)
protected java.lang.String post2_getPayload(java.util.Map<java.lang.String,java.lang.String> vars)
vars
- Keys & values will be url-encoded.
Special case: if there is 1 key "", then just the value is returned (url-encoded).public final java.lang.String delete(java.lang.String uri, boolean authenticate) throws TwitterException
Twitter.IHttpClient
delete
in interface Twitter.IHttpClient
uri
- The uri to post to.authenticate
- If true, send user authenticationTwitterException
- for a variety of reasonsTwitterException.E404
- for resource-does-not-exist errorsprotected final void processHeaders(java.net.HttpURLConnection connection, java.lang.String resource)
getHeader(String)
connection
- protected void setAuthentication(java.net.URLConnection connection)
public void setMinRateLimit(int minRateLimit)
public void setRetryOnError(boolean retryOnError)
setRetryOnError
in interface Twitter.IHttpClient
public void setTimeout(int millisecs)
Twitter.IHttpClient
setTimeout
in interface Twitter.IHttpClient
public java.lang.String toString()
toString
in class java.lang.Object