use of java.net.HttpRetryException in project phonegap-facebook-plugin by Wizcorp.
the class HttpURLConnectionImpl method getResponse.
/**
* Aggressively tries to get the final HTTP response, potentially making
* many HTTP requests in the process in order to cope with redirects and
* authentication.
*/
private HttpEngine getResponse() throws IOException {
initHttpEngine();
if (httpEngine.hasResponse()) {
return httpEngine;
}
while (true) {
if (!execute(true)) {
continue;
}
Retry retry = processResponseHeaders();
if (retry == Retry.NONE) {
httpEngine.automaticallyReleaseConnectionToPool();
return httpEngine;
}
// The first request was insufficient. Prepare for another...
String retryMethod = method;
OutputStream requestBody = httpEngine.getRequestBody();
// Although RFC 2616 10.3.2 specifies that a HTTP_MOVED_PERM
// redirect should keep the same method, Chrome, Firefox and the
// RI all issue GETs when following any redirect.
int responseCode = getResponseCode();
if (responseCode == HTTP_MULT_CHOICE || responseCode == HTTP_MOVED_PERM || responseCode == HTTP_MOVED_TEMP || responseCode == HTTP_SEE_OTHER) {
retryMethod = "GET";
requestBody = null;
}
if (requestBody != null && !(requestBody instanceof RetryableOutputStream)) {
throw new HttpRetryException("Cannot retry streamed HTTP body", httpEngine.getResponseCode());
}
if (retry == Retry.DIFFERENT_CONNECTION) {
httpEngine.automaticallyReleaseConnectionToPool();
}
httpEngine.release(false);
httpEngine = newHttpEngine(retryMethod, rawRequestHeaders, httpEngine.getConnection(), (RetryableOutputStream) requestBody);
}
}
use of java.net.HttpRetryException in project hudson-2.x by hudson.
the class Main method remotePost.
/**
* Run command and place the result to a remote Hudson installation
*/
public static int remotePost(String[] args) throws Exception {
String projectName = args[0];
String home = getHudsonHome();
// make sure it ends with '/'
if (!home.endsWith("/"))
home = home + '/';
// check for authentication info
String auth = new URL(home).getUserInfo();
if (auth != null)
auth = "Basic " + new Base64Encoder().encode(auth.getBytes("UTF-8"));
{
// check if the home is set correctly
HttpURLConnection con = open(new URL(home));
if (auth != null)
con.setRequestProperty("Authorization", auth);
con.connect();
if (con.getResponseCode() != 200 || con.getHeaderField("X-Hudson") == null) {
System.err.println(home + " is not Hudson (" + con.getResponseMessage() + ")");
return -1;
}
}
String projectNameEnc = URLEncoder.encode(projectName, "UTF-8").replaceAll("\\+", "%20");
{
// check if the job name is correct
HttpURLConnection con = open(new URL(home + "job/" + projectNameEnc + "/acceptBuildResult"));
if (auth != null)
con.setRequestProperty("Authorization", auth);
con.connect();
if (con.getResponseCode() != 200) {
System.err.println(projectName + " is not a valid job name on " + home + " (" + con.getResponseMessage() + ")");
return -1;
}
}
// get a crumb to pass the csrf check
String crumbField = null, crumbValue = null;
try {
HttpURLConnection con = open(new URL(home + "crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)'"));
if (auth != null)
con.setRequestProperty("Authorization", auth);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = in.readLine();
in.close();
String[] components = line.split(":");
if (components.length == 2) {
crumbField = components[0];
crumbValue = components[1];
}
} catch (IOException e) {
// presumably this Hudson doesn't use CSRF protection
}
// write the output to a temporary file first.
File tmpFile = File.createTempFile("hudson", "log");
try {
FileOutputStream os = new FileOutputStream(tmpFile);
Writer w = new OutputStreamWriter(os, "UTF-8");
w.write("<?xml version='1.0' encoding='UTF-8'?>");
w.write("<run><log encoding='hexBinary' content-encoding='" + Charset.defaultCharset().name() + "'>");
w.flush();
// run the command
long start = System.currentTimeMillis();
List<String> cmd = new ArrayList<String>();
for (int i = 1; i < args.length; i++) cmd.add(args[i]);
Proc proc = new Proc.LocalProc(cmd.toArray(new String[0]), (String[]) null, System.in, new DualOutputStream(System.out, new EncodingStream(os)));
int ret = proc.join();
w.write("</log><result>" + ret + "</result><duration>" + (System.currentTimeMillis() - start) + "</duration></run>");
w.close();
String location = home + "job/" + projectNameEnc + "/postBuildResult";
while (true) {
try {
// start a remote connection
HttpURLConnection con = open(new URL(location));
if (auth != null)
con.setRequestProperty("Authorization", auth);
if (crumbField != null && crumbValue != null) {
con.setRequestProperty(crumbField, crumbValue);
}
con.setDoOutput(true);
// this tells HttpURLConnection not to buffer the whole thing
con.setFixedLengthStreamingMode((int) tmpFile.length());
con.connect();
// send the data
FileInputStream in = new FileInputStream(tmpFile);
Util.copyStream(in, con.getOutputStream());
in.close();
if (con.getResponseCode() != 200) {
Util.copyStream(con.getErrorStream(), System.err);
}
return ret;
} catch (HttpRetryException e) {
if (e.getLocation() != null) {
// retry with the new location
location = e.getLocation();
continue;
}
// otherwise failed for reasons beyond us.
throw e;
}
}
} finally {
tmpFile.delete();
}
}
use of java.net.HttpRetryException in project robovm by robovm.
the class URLConnectionTest method testAuthenticateWithStreamingPost.
private void testAuthenticateWithStreamingPost(StreamingMode streamingMode) throws Exception {
MockResponse pleaseAuthenticate = new MockResponse().setResponseCode(401).addHeader("WWW-Authenticate: Basic realm=\"protected area\"").setBody("Please authenticate.");
server.enqueue(pleaseAuthenticate);
server.play();
Authenticator.setDefault(new SimpleAuthenticator());
HttpURLConnection connection = (HttpURLConnection) server.getUrl("/").openConnection();
connection.setDoOutput(true);
byte[] requestBody = { 'A', 'B', 'C', 'D' };
if (streamingMode == StreamingMode.FIXED_LENGTH) {
connection.setFixedLengthStreamingMode(requestBody.length);
} else if (streamingMode == StreamingMode.CHUNKED) {
connection.setChunkedStreamingMode(0);
}
OutputStream outputStream = connection.getOutputStream();
outputStream.write(requestBody);
outputStream.close();
try {
connection.getInputStream();
fail();
} catch (HttpRetryException expected) {
}
// no authorization header for the request...
RecordedRequest request = server.takeRequest();
assertContainsNoneMatching(request.getHeaders(), "Authorization: Basic .*");
assertEquals(Arrays.toString(requestBody), Arrays.toString(request.getBody()));
}
use of java.net.HttpRetryException in project robovm by robovm.
the class HttpURLConnectionImpl method getResponse.
/**
* Aggressively tries to get the final HTTP response, potentially making
* many HTTP requests in the process in order to cope with redirects and
* authentication.
*/
private HttpEngine getResponse() throws IOException {
initHttpEngine();
if (httpEngine.hasResponse()) {
return httpEngine;
}
while (true) {
if (!execute(true)) {
continue;
}
Retry retry = processResponseHeaders();
if (retry == Retry.NONE) {
httpEngine.automaticallyReleaseConnectionToPool();
return httpEngine;
}
// The first request was insufficient. Prepare for another...
String retryMethod = method;
OutputStream requestBody = httpEngine.getRequestBody();
// Although RFC 2616 10.3.2 specifies that a HTTP_MOVED_PERM
// redirect should keep the same method, Chrome, Firefox and the
// RI all issue GETs when following any redirect.
int responseCode = getResponseCode();
if (responseCode == HTTP_MULT_CHOICE || responseCode == HTTP_MOVED_PERM || responseCode == HTTP_MOVED_TEMP || responseCode == HTTP_SEE_OTHER) {
retryMethod = "GET";
requestBody = null;
}
if (requestBody != null && !(requestBody instanceof RetryableOutputStream)) {
throw new HttpRetryException("Cannot retry streamed HTTP body", httpEngine.getResponseCode());
}
if (retry == Retry.DIFFERENT_CONNECTION) {
httpEngine.automaticallyReleaseConnectionToPool();
}
httpEngine.release(false);
httpEngine = newHttpEngine(retryMethod, rawRequestHeaders, httpEngine.getConnection(), (RetryableOutputStream) requestBody);
}
}
use of java.net.HttpRetryException in project robovm by robovm.
the class OldHttpRetryExceptionTest method test_ConstructorLStringI.
public void test_ConstructorLStringI() {
String[] message = { "Test message", "", "Message", "~!@#$% &*(", null };
int[] codes = { 400, 404, 200, 500, 0 };
for (int i = 0; i < message.length; i++) {
HttpRetryException hre = new HttpRetryException(message[i], codes[i]);
assertEquals(message[i], hre.getReason());
assertTrue("responseCode is incorrect: " + hre.responseCode(), hre.responseCode() == codes[i]);
}
}
Aggregations