ConvertAPI - WEB в PDF с использованием WebClient C# throws (400) Неверный запрос

Я получаю сообщение об ошибке "(400) Bad Request" при вызове веб-сайта ConvertApi в Pdf Api.

2 ответа

Решение
 using (var client = new WebClient())
            {
                client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
                var response = client.UploadString("https://v2.convertapi.com/web/to/pdf?secret=" + Secret + "&Url=" + value + "&ConversionDelay=" + ConversionDelay, "");
                var ocontent3 = JsonConvert.DeserializeObject<FileList>(response);
                byte[] result = ocontent3.Files[0].FileData;
            }

ConvertAPI и многие другие Rest Api, работающие с двоичными данными, поддерживают multipart или ответ application / octet-stream (двоичный файл), лучше использовать двоичный ответ вместо json (текстовый) в C#. Это будет быстрее - тело ответа будет меньше, время загрузки меньше, и нет необходимости декодировать двоичные данные из JSON Base64.

Таким образом, код может быть

        const string secret = "<YourSecret>";
        const string url = "http://www.google.com";
        const int conversionDelay = 1;
        const string fileToSave = @"C:\Projects\_temp\test1.pdf";

        using (var client = new WebClient())
        {
            client.Headers.Add("accept", "application/octet-stream");
            var response = new byte[] { };
            try
            {
                response = client.UploadValues("https://v2.convertapi.com/web/to/pdf?secret=" + secret, "POST", new NameValueCollection
                {
                    { "Url", url },
                    { "ConversionDelay", conversionDelay.ToString() }
                });
            }
            catch (WebException e)
            {
                Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
                Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
                Console.WriteLine("Body : {0}", new StreamReader(e.Response.GetResponseStream()).ReadToEnd());
            }

            if (response != null)
                File.WriteAllBytes(fileToSave, response);
        }
Другие вопросы по тегам