Exemplo n.º 1
0
        /// <summary>
        /// Verifies the SOAP headers.
        /// </summary>
        /// <param name="requestUri">The request URI.</param>
        /// <param name="requestBody">The request body.</param>
        protected void VerifySoapHeaders(Uri requestUri, string requestBody)
        {
            AdWordsAppConfig config = user.Config as AdWordsAppConfig;

            if (requestUri.AbsoluteUri.StartsWith(config.AdWordsApiServer))
            {
                XmlDocument xDoc = new XmlDocument();
                xDoc.LoadXml(requestBody);

                XmlNamespaceManager xmlns = new XmlNamespaceManager(xDoc.NameTable);
                xmlns.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
                XmlElement requestHeaders = (XmlElement)xDoc.SelectSingleNode(
                    "soap:Envelope/soap:Header/child::*", xmlns);
                Assert.NotNull(requestHeaders);
                Assert.AreEqual(requestHeaders.Name, "RequestHeader");
                foreach (XmlElement childNode in requestHeaders.ChildNodes)
                {
                    switch (childNode.Name)
                    {
                    case "developerToken":
                        Assert.AreEqual(childNode.InnerText, config.DeveloperToken);
                        break;

                    case "clientCustomerId":
                        Assert.AreEqual(childNode.InnerText, config.ClientCustomerId);
                        break;

                    case "userAgent":
                        Assert.AreEqual(childNode.InnerText, config.GetUserAgent());
                        break;
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Builds an HTTP request for uploading operations.
        /// </summary>
        /// <param name="uploadUrl">The upload URL for the batch job.</param>
        /// <param name="postBody">The POST body.</param>
        /// <returns>A webrequest to upload operations to the batch job.</returns>
        private HttpWebRequest BuildRequest(string uploadUrl, string postBody)
        {
            AdWordsAppConfig config = this.User.Config as AdWordsAppConfig;

            byte[] data = Encoding.UTF8.GetBytes(postBody);

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uploadUrl);

            request.Method    = "POST";
            request.Proxy     = config.Proxy;
            request.Timeout   = config.Timeout;
            request.UserAgent = config.GetUserAgent();

            request.ContentType   = "application/xml";
            request.ContentLength = data.Length;
            if (config.EnableGzipCompression)
            {
                (request as HttpWebRequest).AutomaticDecompression = DecompressionMethods.GZip
                                                                     | DecompressionMethods.Deflate;
            }
            else
            {
                (request as HttpWebRequest).AutomaticDecompression = DecompressionMethods.None;
            }

            using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) {
                writer.Write(postBody);
            }
            return(request);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Builds an HTTP request for downloading reports.
        /// </summary>
        /// <param name="downloadUrl">The download url.</param>
        /// <param name="postBody">The POST body.</param>
        /// <returns>A webrequest to download reports.</returns>
        private HttpWebRequest BuildRequest(string downloadUrl, string postBody)
        {
            AdWordsAppConfig config = this.User.Config as AdWordsAppConfig;

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(downloadUrl);

            request.Method    = "POST";
            request.Proxy     = config.Proxy;
            request.Timeout   = config.Timeout;
            request.UserAgent = config.GetUserAgent();

            request.Headers.Add("clientCustomerId: " + config.ClientCustomerId);
            request.ContentType = "application/x-www-form-urlencoded";
            if (config.EnableGzipCompression)
            {
                (request as HttpWebRequest).AutomaticDecompression = DecompressionMethods.GZip
                                                                     | DecompressionMethods.Deflate;
            }
            else
            {
                (request as HttpWebRequest).AutomaticDecompression = DecompressionMethods.None;
            }
            if (this.User.OAuthProvider != null)
            {
                request.Headers["Authorization"] = this.User.OAuthProvider.GetAuthHeader();
            }
            else
            {
                throw new AdWordsApiException(null, AdWordsErrorMessages.OAuthProviderCannotBeNull);
            }

            request.Headers.Add("developerToken: " + config.DeveloperToken);
            // The client library will use only apiMode = true.
            request.Headers.Add("apiMode", "true");

            request.Headers.Add("skipReportHeader", config.SkipReportHeader.ToString().ToLower());
            request.Headers.Add("skipReportSummary", config.SkipReportSummary.ToString().ToLower());
            request.Headers.Add("skipColumnHeader", config.SkipColumnHeader.ToString().ToLower());

            // Send the includeZeroImpressions header only if the user explicitly
            // requested it through the config object.
            if (config.IncludeZeroImpressions.HasValue)
            {
                request.Headers.Add("includeZeroImpressions", config.IncludeZeroImpressions.ToString().
                                    ToLower());
            }

            using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) {
                writer.Write(postBody);
            }
            return(request);
        }
        /// <summary>
        /// Builds an HTTP request for downloading reports.
        /// </summary>
        /// <param name="downloadUrl">The download url.</param>
        /// <param name="returnMoneyInMicros">True if money values are returned
        /// in micros.</param>
        /// <param name="postBody">The POST body.</param>
        /// <returns>A webrequest to download reports.</returns>
        private HttpWebRequest BuildRequest(string downloadUrl, bool?returnMoneyInMicros,
                                            string postBody)
        {
            AdWordsAppConfig config = user.Config as AdWordsAppConfig;

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(downloadUrl);

            request.Method    = "POST";
            request.Proxy     = config.Proxy;
            request.Timeout   = config.Timeout;
            request.UserAgent = config.GetUserAgent();

            request.Headers.Add("clientCustomerId: " + config.ClientCustomerId);
            request.ContentType = "application/x-www-form-urlencoded";
            if (config.EnableGzipCompression)
            {
                (request as HttpWebRequest).AutomaticDecompression = DecompressionMethods.GZip
                                                                     | DecompressionMethods.Deflate;
            }
            else
            {
                (request as HttpWebRequest).AutomaticDecompression = DecompressionMethods.None;
            }
            if (this.User.OAuthProvider != null)
            {
                request.Headers["Authorization"] = this.User.OAuthProvider.GetAuthHeader();
            }
            else
            {
                throw new AdWordsApiException(null, AdWordsErrorMessages.OAuthProviderCannotBeNull);
            }

            if (returnMoneyInMicros.HasValue)
            {
                ValidateVersionReqirementsForMoneyMicros();
                request.Headers.Add("returnMoneyInMicros: " + returnMoneyInMicros.ToString().ToLower());
            }
            request.Headers.Add("developerToken: " + config.DeveloperToken);
            // The client library will use only apiMode = true.
            request.Headers.Add("apiMode", "true");

            using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) {
                writer.Write(postBody);
            }
            return(request);
        }
Exemplo n.º 5
0
        private bool DownloadReportToStream(string downloadUrl, AdWordsAppConfig config, bool returnMoneyInMicros, Stream outputStream, string postBody, AdWordsUser user)
        {
            this.response.Text += "\n Creating request...";
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(downloadUrl);

            if (!string.IsNullOrEmpty(postBody))
            {
                request.Method = "POST";
            }
            request.Proxy     = config.Proxy;
            request.Timeout   = config.Timeout;
            request.UserAgent = config.GetUserAgent();

            if (!string.IsNullOrEmpty(config.ClientEmail))
            {
                request.Headers.Add("clientEmail: " + config.ClientEmail);
            }
            else if (!string.IsNullOrEmpty(config.ClientCustomerId))
            {
                request.Headers.Add("clientCustomerId: " + config.ClientCustomerId);
            }
            request.ContentType = "application/x-www-form-urlencoded";
            if (config.EnableGzipCompression)
            {
                (request as HttpWebRequest).AutomaticDecompression = DecompressionMethods.GZip
                                                                     | DecompressionMethods.Deflate;
            }
            else
            {
                (request as HttpWebRequest).AutomaticDecompression = DecompressionMethods.None;
            }
            if (config.AuthorizationMethod == AdWordsAuthorizationMethod.OAuth2)
            {
                if (user.OAuthProvider != null)
                {
                    request.Headers["Authorization"] = user.OAuthProvider.GetAuthHeader(downloadUrl);
                }
                else
                {
                    //throw new AdWordsApiException(null, AdWordsErrorMessages.OAuthProviderCannotBeNull);
                }
            }
            else if (config.AuthorizationMethod == AdWordsAuthorizationMethod.ClientLogin)
            {
                string authToken = (!string.IsNullOrEmpty(config.AuthToken)) ? config.AuthToken :
                                   new AuthToken(config, AdWordsSoapClient.SERVICE_NAME, config.Email,
                                                 config.Password).GetToken();
                request.Headers["Authorization"] = "GoogleLogin auth=" + authToken;
            }

            request.Headers.Add("returnMoneyInMicros: " + returnMoneyInMicros.ToString().ToLower());
            request.Headers.Add("developerToken: " + config.DeveloperToken);
            // The client library will use only apiMode = true.
            request.Headers.Add("apiMode", "true");

            if (!string.IsNullOrEmpty(postBody))
            {
                using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
                {
                    writer.Write(postBody);
                }
            }

            // AdWords API now returns a 400 for an API error.
            bool        retval   = false;
            WebResponse response = null;

            try
            {
                this.response.Text += "\n Getting server response...";
                response            = request.GetResponse();
                retval              = true;
            }
            catch (WebException ex)
            {
                response = ex.Response;
                byte[] preview       = ConvertStreamToByteArray(response.GetResponseStream(), MAX_ERROR_LENGTH);
                string previewString = ConvertPreviewBytesToString(preview);
                retval = false;
                this.webExceptionTextBox.Text = previewString;
            }
            MediaUtilities.CopyStream(response.GetResponseStream(), outputStream);
            response.Close();
            return(retval);
        }