title: How to send an http RequestHeader using Selenium 2?
body: <p>I needed to send an Http request with a few modified headers. After several hours trying to find an equivalent method to that of Selenium RC <code>Selenium.addCustomRequestHeader</code> for Selenium 2, I gave up and used JavaScript for my purposes. I have expected this to be a lot easier!</p>
  
  <p>Does someone know a better method?</p>
  
  <p>This is what I have done:</p>
  
  <h3>javascript.js</h3>
  
  <pre class="lang-js prettyprint-override"><code>var test = {
      "sendHttpHeaders": function(dst, header1Name, header1Val, header2Name, header2Val) {
          var http = new XMLHttpRequest();
  
          http.open("GET", dst, "false");
          http.setRequestHeader(header1Name,header1Val);
          http.setRequestHeader(header2Name,header2Val);
          http.send(null);
      }
  }
  </code></pre>
  
  <h3>MyTest.java</h3>
  
  <pre class="lang-java prettyprint-override"><code>// ...
  
  @Test
  public void testFirstLogin() throws Exception {
      WebDriver driver = new FirefoxDriver();
  
      String url = System.getProperty(Constants.URL_PROPERTY_NAME);
      driver.get(url);
  
      // Using javascript to send http headers
      String scriptResource = this.getClass().getPackage().getName()
          .replace(".", "/") + "/javascript.js";
  
      String script = getFromResource(scriptResource)
              + "test.sendHttpHeaders(\"" + url + "\", \"" + h1Name
              + "\", \"" + h1Val + "\", \"" + h2Name + "\", \"" + h2Val + "\");";
      LOG.debug("script: " + script);
  
      ((JavascriptExecutor)driver).executeScript(loginScript);
  
      // ...
  }
  
  // I don't like mixing js with my code. I've written this utility method to get
  // the js from the classpath
  /**
   * @param src name of a resource that must be available from the classpath
   * @return new string with the contents of the resource
   * @throws IOException if resource not found
   */
  public static String getFromResource(String src) throws IOException {
      InputStream is = Thread.currentThread().getContextClassLoader().
              getResourceAsStream(src);
      if (null == is) {
          throw new IOException("Resource " + src + " not found.");
      }
      InputStreamReader isr = new InputStreamReader(is);
      BufferedReader br = new BufferedReader(isr);
      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);
  
      String line = null;
      int nLines = 0;
      while (null != (line = br.readLine())) {
          pw.println(line);
          nLines ++;
      }
      LOG.info("Resource " + src + " successfully copied into String (" + nLines + " lines copied).");
      return sw.toString();
  }
  
  // ...
  </code></pre>
  
  <p>Notice: To simplify this post, I have edited my original code. I hope I haven't introduced any errors!</p>