Search in sources :

Example 1 with HttpRetryException

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);
    }
}
Also used : FaultRecoveringOutputStream(com.squareup.okhttp.internal.FaultRecoveringOutputStream) OutputStream(java.io.OutputStream) AbstractOutputStream(com.squareup.okhttp.internal.AbstractOutputStream) HttpRetryException(java.net.HttpRetryException)

Example 2 with HttpRetryException

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();
    }
}
Also used : DualOutputStream(hudson.util.DualOutputStream) InputStreamReader(java.io.InputStreamReader) ArrayList(java.util.ArrayList) IOException(java.io.IOException) HttpRetryException(java.net.HttpRetryException) URL(java.net.URL) Base64Encoder(com.thoughtworks.xstream.core.util.Base64Encoder) FileInputStream(java.io.FileInputStream) HttpURLConnection(java.net.HttpURLConnection) FileOutputStream(java.io.FileOutputStream) BufferedReader(java.io.BufferedReader) OutputStreamWriter(java.io.OutputStreamWriter) EncodingStream(hudson.util.EncodingStream) File(java.io.File) Writer(java.io.Writer) OutputStreamWriter(java.io.OutputStreamWriter)

Example 3 with HttpRetryException

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()));
}
Also used : RecordedRequest(com.google.mockwebserver.RecordedRequest) MockResponse(com.google.mockwebserver.MockResponse) HttpURLConnection(java.net.HttpURLConnection) GZIPOutputStream(java.util.zip.GZIPOutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) OutputStream(java.io.OutputStream) HttpRetryException(java.net.HttpRetryException)

Example 4 with HttpRetryException

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);
    }
}
Also used : OutputStream(java.io.OutputStream) HttpRetryException(java.net.HttpRetryException)

Example 5 with HttpRetryException

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]);
    }
}
Also used : HttpRetryException(java.net.HttpRetryException)

Aggregations

HttpRetryException (java.net.HttpRetryException)12 OutputStream (java.io.OutputStream)7 IOException (java.io.IOException)3 HttpURLConnection (java.net.HttpURLConnection)3 MockResponse (com.google.mockwebserver.MockResponse)2 RecordedRequest (com.google.mockwebserver.RecordedRequest)2 AbstractOutputStream (com.squareup.okhttp.internal.AbstractOutputStream)2 FaultRecoveringOutputStream (com.squareup.okhttp.internal.FaultRecoveringOutputStream)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 ProtocolException (java.net.ProtocolException)2 URL (java.net.URL)2 GZIPOutputStream (java.util.zip.GZIPOutputStream)2 Base64Encoder (com.thoughtworks.xstream.core.util.Base64Encoder)1 DualOutputStream (hudson.util.DualOutputStream)1 EncodingStream (hudson.util.EncodingStream)1 BufferedReader (java.io.BufferedReader)1 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 FileOutputStream (java.io.FileOutputStream)1 InputStreamReader (java.io.InputStreamReader)1