@Test public void verifyExampleInClassLevelJavadoc() throws Exception { Assume.group(TestGroup.PERFORMANCE); WebClient webClient = new WebClient(); MockMvc mockMvc = MockMvcBuilders.standaloneSetup().build(); MockMvcWebConnection mockConnection = new MockMvcWebConnection(mockMvc, webClient); WebRequestMatcher cdnMatcher = new UrlRegexRequestMatcher(".*?//code.jquery.com/.*"); WebConnection httpConnection = new HttpWebConnection(webClient); webClient.setWebConnection( new DelegatingWebConnection(mockConnection, new DelegateWebConnection(cdnMatcher, httpConnection))); Page page = webClient.getPage("http://code.jquery.com/jquery-1.11.0.min.js"); assertThat(page.getWebResponse().getStatusCode(), equalTo(200)); assertThat(page.getWebResponse().getContentAsString(), not(isEmptyString())); }
@Test public void buildContentType() throws Exception { this.response.addHeader("Content-Type", "text/html; charset-UTF-8"); WebResponse webResponse = this.responseBuilder.build(); assertThat(webResponse.getContentType(), equalTo("text/html")); }
@Test public void buildResponseHeadersNullDomainDefaulted() throws Exception { Cookie cookie = new Cookie("cookieA", "valueA"); this.response.addCookie(cookie); WebResponse webResponse = this.responseBuilder.build(); List<NameValuePair> responseHeaders = webResponse.getResponseHeaders(); assertThat(responseHeaders.size(), equalTo(1)); NameValuePair header = responseHeaders.get(0); assertThat(header.getName(), equalTo("Set-Cookie")); assertThat(header.getValue(), equalTo("cookieA=valueA")); }
@Test public void buildStatus() throws Exception { WebResponse webResponse = this.responseBuilder.build(); assertThat(webResponse.getStatusCode(), equalTo(200)); assertThat(webResponse.getStatusMessage(), equalTo("OK")); }
private JSONObject callStepsToJson(String jenkinsFileContent) throws IOException { JenkinsRule.WebClient wc = j.createWebClient(); WebRequest req = new WebRequest(new URL(wc.getContextPath() + ModelConverterAction.PIPELINE_CONVERTER_URL + "/stepsToJson"), HttpMethod.POST); assertNotNull(jenkinsFileContent); NameValuePair pair = new NameValuePair("jenkinsfile", jenkinsFileContent); req.setRequestParameters(Collections.singletonList(pair)); String rawResult = wc.getPage(req).getWebResponse().getContentAsString(); assertNotNull(rawResult); return JSONObject.fromObject(rawResult); } }
@Before public void setup() throws Exception { request = new WebRequest(new URL("http://localhost/")); WebResponseData data = new WebResponseData("".getBytes("UTF-8"), 200, "", Collections.emptyList()); expectedResponse = new WebResponse(data, request, 100L); webConnection = new DelegatingWebConnection(defaultConnection, new DelegateWebConnection(matcher1, connection1), new DelegateWebConnection(matcher2, connection2)); }
public void testStaplerProxy() throws Exception { WebClient wc = new WebClient(); Page p = wc.getPage(new URL(url, "staplerProxyOK")); assertEquals(200, p.getWebResponse().getStatusCode()); try { p = wc.getPage(new URL(url, "staplerProxyFail")); fail("expected failure"); } catch (FailingHttpStatusCodeException ex) { assertEquals(404, ex.getStatusCode()); } assertTrue(staplerProxyOK.counter > 0); assertTrue(staplerProxyFail.counter > 0); }
private void copyViaHttp(Folder f, JenkinsRule.WebClient wc, String fromName, String toName) throws Exception { // Taken from https://github.com/jenkinsci/jenkins/blob/80aa2c8e4093df270193402c3933f3f1f16271da/test/src/test/java/hudson/jobs/CreateItemTest.java#L68 r.jenkins.setCrumbIssuer(null); URL apiURL = new URL( r.jenkins.getRootUrl().toString() + "/" + f.getUrl().toString() + "createItem?mode=copy&from=" + URLEncoder.encode(fromName, "UTF-8") + "&name=" + URLEncoder.encode(toName, "UTF-8")); WebRequest request = new WebRequest(apiURL, HttpMethod.POST); request.setEncodingType(null); assertEquals("Copy Job request has failed", 200, r.createWebClient() .getPage(request).getWebResponse().getStatusCode()); }
private HtmlPage getHtmlPage() { try { String html = this.browser.browser.getText(); final List<NameValuePair> responseHeaders = new ArrayList<>(); String u = browser.browser.getUrl(); URL url = new URL(u); WebRequest request = new WebRequest(url); WebResponseData webResponseData = new WebResponseData(html.getBytes(), 200, "OK", responseHeaders); WebResponse webResponse = new WebResponse(webResponseData, request, 0); WebWindow w = this.getCurrentWindow(); HtmlPage p = HTMLParser.parseHtml(webResponse, w); p.initialize(); // String title = p.getTitleText(); if (u.toLowerCase().contains("audible")) lastPage = p; // logger.info("xml=" + p.asXml()); return p; } catch (Throwable th) { th.printStackTrace(); } return null; }
@Override public String getSource(final DebuggableScript script) { String sourceName = script.getSourceName(); if (sourceName.endsWith("(eval)") || sourceName.endsWith("(Function)")) { return null; // script is result of eval call. Rhino already knows the source and we don't } if (sourceName.startsWith("script in ")) { sourceName = StringUtils.substringBetween(sourceName, "script in ", " from"); for (final WebWindow ww : client.getWebWindows()) { final WebResponse wr = ww.getEnclosedPage().getWebResponse(); if (sourceName.equals(wr.getWebRequest().getUrl().toString())) { return wr.getContentAsString(); } } } return null; } };
/** * Parses and then inserts the specified HTML content into the HTML content currently being parsed. * @param html the HTML content to push */ public void pushInputString(final String html) { page_.registerParsingStart(); page_.registerInlineSnippetParsingStart(); try { final WebResponse webResponse = page_.getWebResponse(); final Charset charset = webResponse.getContentCharset(); final String url = webResponse.getWebRequest().getUrl().toString(); final XMLInputSource in = new XMLInputSource(null, url, null, new StringReader(html), charset.name()); ((HTMLConfiguration) fConfiguration).evaluateInputSource(in); } finally { page_.registerParsingEnd(); page_.registerInlineSnippetParsingEnd(); } }
private static String getSuffix(final WebResponse response) { // first try to take the one from the requested file final String url = response.getWebRequest().getUrl().toString(); final String fileName = StringUtils.substringAfterLast(StringUtils.substringBefore(url, "?"), "/"); // if there is a suffix with 2-4 letters, the take it final String suffix = StringUtils.substringAfterLast(fileName, "."); if (suffix.length() > 1 && suffix.length() < 5) { return suffix; } // use content type return MimeType.getFileExtension(response.getContentType()); }
public static JsonObject getPageAsJSONObject(String path, URL url, WebClient client) throws IOException { if (client == null) { client = new WebClient(); } JsonReader jsonReader = Json.createReader(client.getPage(url.toString().concat(path)).getWebResponse().getContentAsStream()); return jsonReader.readObject(); }
@Test @SpecAssertion(section = CONVERSATION_CONTEXT_EE, id = "m") public void testConversationPropagatedOverRedirect() throws Exception { WebClient webClient = new WebClient(); HtmlPage storm = webClient.getPage(getPath("storm.jsf")); // Begin long-running conversation HtmlSubmitInput beginConversationButton = getFirstMatchingElement(storm, HtmlSubmitInput.class, "beginConversationButton"); storm = beginConversationButton.click(); // Set input value HtmlTextInput stormStrength = getFirstMatchingElement(storm, HtmlTextInput.class, "stormStrength"); stormStrength.setValueAttribute(REDIRECT_STORM_STRENGTH); String stormCid = getCid(storm); // Submit value and redirect to the next form HtmlSubmitInput lighteningButton = getFirstMatchingElement(storm, HtmlSubmitInput.class, "lighteningButton"); HtmlPage lightening = lighteningButton.click(); assertTrue(lightening.getWebResponse().getWebRequest().getUrl().toString().contains("lightening.jsf")); assertEquals(stormCid, getCid(lightening)); stormStrength = getFirstMatchingElement(lightening, HtmlTextInput.class, "stormStrength"); assertEquals(stormStrength.getValueAttribute(), REDIRECT_STORM_STRENGTH); }
@Override protected boolean isCacheable(WebRequest request, WebResponse response) { final boolean isGetRequestForStaticContent = super.isCacheable(request, response); final boolean isRequestForNoopJsp = response.getWebRequest().getUrl().toString().contains("noop.jsp"); final boolean hasNoRequestParameters = request.getRequestParameters().isEmpty(); final boolean requestHasNoQueryString = !response.getWebRequest().getUrl().toString().contains("?"); return isGetRequestForStaticContent || (isRequestForNoopJsp && hasNoRequestParameters && requestHasNoQueryString); }
/** * Saves this content as the specified file. * @param file the file to save to * @throws IOException if an IO error occurs */ public void saveAs(final File file) throws IOException { final HtmlPage page = (HtmlPage) getPage(); final WebClient webclient = page.getWebClient(); final URL url = page.getFullyQualifiedUrl(getAttributeDirect("src")); final WebRequest request = new WebRequest(url); request.setCharset(page.getCharset()); request.setAdditionalHeader(HttpHeader.REFERER, page.getUrl().toExternalForm()); final WebResponse webResponse = webclient.loadWebResponse(request); try (FileOutputStream fos = new FileOutputStream(file); InputStream content = webResponse.getContentAsStream()) { IOUtils.copy(content, fos); } }
/** * Reloads the current page, possibly forcing retrieval from the server even if * the browser cache contains the latest version of the document. * @param force if {@code true}, force reload from server; otherwise, may reload from cache * @throws IOException if there is a problem reloading the page * @see <a href="http://msdn.microsoft.com/en-us/library/ms536342.aspx">MSDN Documentation</a> */ @JsxFunction public void reload(final boolean force) throws IOException { final HtmlPage htmlPage = (HtmlPage) getWindow(getStartingScope()).getWebWindow().getEnclosedPage(); final WebRequest request = htmlPage.getWebResponse().getWebRequest(); String referer = htmlPage.getUrl().toExternalForm(); request.setAdditionalHeader(HttpHeader.REFERER, referer); referer = UrlUtils.getUrlWithNewQuery(htmlPage.getUrl(), null).toExternalForm(); referer = StringUtils.stripEnd(referer, "/"); request.setAdditionalHeader(HttpHeader.ORIGIN, referer); final WebWindow webWindow = window_.getWebWindow(); webWindow.getWebClient().download(webWindow, "", request, true, false, "JS location.reload"); }
@Override public void printContentIfNecessary(WebResponse webResponse) { int statusCode = webResponse.getStatusCode(); if (getOptions().getPrintContentOnFailingStatusCode() && !(statusCode >= SC_OK && statusCode < SC_MULTIPLE_CHOICES)) { logger.log(SEVERE, webResponse.getWebRequest().getUrl().toExternalForm()); } super.printContentIfNecessary(webResponse); } };
protected Map<String, DomAttr> getAttributesFor(final HtmlLink link) throws IOException { final Map<String, DomAttr> map = createAttributesCopyWithClonedAttribute(link, "href"); final DomAttr hrefAttr = map.get("href"); if (hrefAttr != null && StringUtils.isNotBlank(hrefAttr.getValue())) { final String protocol = link.getWebRequest().getUrl().getProtocol(); if ("http".equals(protocol) || "https".equals(protocol)) { final File file = createFile(hrefAttr.getValue(), ".css"); FileUtils.writeStringToFile(file, link.getWebResponse(true, null).getContentAsString(), ISO_8859_1); hrefAttr.setValue(outputDir_.getName() + FILE_SEPARATOR + file.getName()); } } return map; }
/** * Immediately refreshes the specified page using the specified URL. * @param page the page that is going to be refreshed * @param url the URL where the new page will be loaded * @param seconds the number of seconds to wait before reloading the page (ignored!) * @throws IOException if the refresh fails */ @Override public void handleRefresh(final Page page, final URL url, final int seconds) throws IOException { final WebWindow window = page.getEnclosingWindow(); if (window == null) { return; } final WebClient client = window.getWebClient(); if (page.getUrl().toExternalForm().equals(url.toExternalForm()) && HttpMethod.GET == page.getWebResponse().getWebRequest().getHttpMethod()) { final String msg = "Refresh to " + url + " (" + seconds + "s) aborted by HtmlUnit: " + "Attempted to refresh a page using an ImmediateRefreshHandler " + "which could have caused an OutOfMemoryError " + "Please use WaitingRefreshHandler or ThreadedRefreshHandler instead."; throw new RuntimeException(msg); } client.getPage(window, new WebRequest(url)); }