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.IHttpClientisRetryOnError in interface Twitter.IHttpClientpublic 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.IHttpClientTwitter_Account.verifyCredentials() if you need to check a
login.canAuthenticate in interface Twitter.IHttpClientpublic 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.IHttpClientconnect in interface Twitter.IHttpClientjava.io.IOExceptionpublic Twitter.IHttpClient copy()
copy in interface Twitter.IHttpClientpublic URLConnectionHttpClient clone()
copy()clone in class java.lang.Objectprotected final void disconnect(java.net.HttpURLConnection connection)
public java.lang.String getHeader(java.lang.String headerName)
Twitter.IHttpClientgetHeader in interface Twitter.IHttpClientpublic java.util.Map<java.lang.String,RateLimit> getRateLimits()
getRateLimits in interface Twitter.IHttpClientpublic 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.IHttpClientgetPage in interface Twitter.IHttpClienturl - 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.IHttpClientTwitter.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.IHttpClientpost in interface Twitter.IHttpClienturi - 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.IHttpClientpublic java.net.HttpURLConnection post2_connect(java.lang.String uri,
java.util.Map<java.lang.String,java.lang.String> vars)
throws java.lang.Exception
Twitter.IHttpClientpost2_connect in interface Twitter.IHttpClientTwitterExceptionjava.lang.Exceptionpublic java.net.HttpURLConnection post2_connect(java.lang.String uri,
com.winterwell.json.JSONObject body)
throws java.lang.Exception
Twitter.IHttpClientpost2_connect in interface Twitter.IHttpClientTwitterExceptionjava.lang.Exceptionpublic java.net.HttpURLConnection post2_connect(java.lang.String uri,
java.lang.String payload)
throws java.lang.Exception
Twitter.IHttpClientpost2_connect in interface Twitter.IHttpClientTwitterExceptionjava.lang.Exceptionprotected 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.IHttpClientdelete in interface Twitter.IHttpClienturi - 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.IHttpClientpublic void setTimeout(int millisecs)
Twitter.IHttpClientsetTimeout in interface Twitter.IHttpClientpublic java.lang.String toString()
toString in class java.lang.Object