/// <summary> /// HttpWebRequest 객체를 생성하고 초기화한다. /// </summary> /// <returns></returns> private HttpWebRequest createWebRequest() { makeUriString(); Console.WriteLine("HttpRestClient " + Method + " " + RequestUri); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(RequestUri); request.Method = Method; request.ReadWriteTimeout = Timeout * 1000; request.Timeout = Timeout * 1000; request.Accept = ResponseDataFormat; //request.Credentials = CredentialCache.DefaultCredentials; request.UserAgent = "StockItemData Client"; //request.Referer = ""; //request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip"); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; // 인증정보가 다른 서버로 새어나가지 않도록 API 서버 주소와 비교한다. string urlBase = Configure.server + "/" + Configure.apiVersion; if (RequestUri.StartsWith(urlBase)) { // 인증헤더 추가 string authorize = getAuthorizationString(); if (authorize != null && authorize.Length > 0) { // 인식하지 않음 // request.Credentials 을 사용할 것을 권장하는데 개발하기 번거로우니, X- 헤더로 대체함 //request.PreAuthenticate = true; //request.Headers.Add("Authorization", authorize); request.Headers.Add("X-Authorization", authorize); } // 암호화 헤더 추가 if (UserEncryptMode) { // 암호화헤더 추가 byte[] key = AESUtil.createRandomKeys(AESUtil.AES_BITS_256); AESUtil.Key = key; string rsaEncodedKey = "AES/256/CBC," + RSAEncrypt.Encrypt(key); Console.WriteLine("X-Encrypt-Key:" + rsaEncodedKey); request.Headers.Add("X-Encrypt-Key", rsaEncodedKey); } } else { Console.WriteLine("요청 주소는 API서버가 아님 [" + RequestUri + "]"); // 암호화기능 disable UserEncryptMode = false; } return(request); }