title: Java - Illegal character(s) in message header value: Basic
body: <p>I get the following error when trying to query an api in Java using HttpUrlConnection:</p>
  
  <pre><code>    "Exception in thread "main" java.lang.IllegalArgumentException: Illegal   character(s) in message header value: Basic MTk2YTVjODdhNWI2YjFmNWE3ZmQ5ODEtYjFjYTEzZmUtM2FkNC0xMWU1LWEyZjAtMDBkMGZlYTgy
  NjI0OmY3NDQ2ZWQ0YjhjNzI2MzkyMzY1YzczLWIxY2ExNjQ4LTNhZDQtMTFlNS1hMmYwLTAwZDBm
  ZWE4MjYyNA=="
  </code></pre>
  
  <p>Here is my code:</p>
  
  <pre><code>public class LocalyticsTest {
  
          public static void main(String[] args) throws UnsupportedEncodingException {
  
              String apiKey = "MyKey";
              String apiSecret = "MySecretKey";
              String apiUrl = "https://api.localytics.com/v1/query";
              String credentials = apiKey + ":" + apiSecret;
              //String encoding = Base64.encode(apiKey.getBytes("UTF-8"));
              //String encoding2 = Base64.encode(apiSecret.getBytes("UTF-8"));
              String encoding3 = new sun.misc.BASE64Encoder().encode (credentials.getBytes("UTF-8"));
  
              String appId = "myAppId";
              String metric = "sessions";
              String dimensions = "day";
              String condition = "'{\"day\":[\"between\",\"'.$newDate.'\",\"'.$newDate.'\"]}'";
              Map data = new HashMap();
              data.put("app_id", appId);
              data.put("metric", metric);
              data.put("dimensions", dimensions);
              data.put("condition", condition);
  
              QueryEncoder q = new QueryEncoder();
              String newData = q.toQueryString(data);
  
              String newUrl = String.format("%s?%s", apiUrl, newData);
  
  
              try{
                  URL url = new URL(newUrl);
                  HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                  //conn.setRequestMethod("GET");
                  //conn.setRequestProperty("Authorization", "Basic");
                  //conn.setRequestProperty(apiKey,apiSecret);
                  conn.setRequestProperty("Authorization", "Basic " + encoding3);
                  conn.setRequestProperty("Accept", "application/vnd.localytics.v1+hal+json");
  
  
                  if (conn.getResponseCode() != 200) {
                      throw new RuntimeException("Failed : HTTP error code : "
                              + conn.getResponseCode());
                  }
  
                  BufferedReader br = new BufferedReader(new InputStreamReader(
                          (conn.getInputStream())));
  
                  String output;
                  System.out.println("Output from Server .... \n");
                  while ((output = br.readLine()) != null) {
                      System.out.println(output);
                  }
  
                  conn.disconnect();
  
              } catch (MalformedURLException e) {
                  e.printStackTrace();
              } catch (ProtocolException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              }
         }
      }
  </code></pre>
  
  <p>I am able to get it to work fine in php with Curl with the following:</p>
  
  <pre><code>function call_localytics_api($method, $url, $data)
  {
      $curl = curl_init();
      $url = sprintf("%s?%s", $url, http_build_query($data));
      $api_key = "myKey";
      $api_secret = "mySecret";
      // Optional Authentication:
      curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
      curl_setopt($curl, CURLOPT_USERPWD, $api_key . ":" . $api_secret);
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      // Disable the SSL verificaiton process
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($curl, CURLOPT_HTTPHEADER, array("Accept: application/vnd.localytics.v1+hal+json"));
  
      // Confirm cURL gave a result, if not, write the error
  
      $response = curl_exec($curl);
  
      if ($response === FALSE) {
          die("Curl Failed: " . curl_error($curl));
      } else {
          return $response;
      }
  }
  
  $api_querystring = "https://api.localytics.com/v1/query";
  $app_id = "myAppId";
  
  $metric = "sessions";
  $dimensions = "day";
  //$data = array(app_id =&gt; $app_id, metrics =&gt; $metric, dimensions =&gt; $dimensions, conditions =&gt; '{"day":["in","'.$requestDate.'"]}');
  $data = array(app_id =&gt; $app_id, metrics =&gt; $metric, dimensions =&gt; $dimensions, conditions =&gt; '{"day":["between","'.$newDate.'","'.$newDate.'"]}');
  $response = call_localytics_api('GET', $api_querystring, $data);
  $json = json_decode($response);
  print_r($json);
  </code></pre>
  
  <p>Just need help getting it to work in Java.</p>