C#.NET WebClient方法DownloadData()在XML页面的GET请求上返回空字符串

时间:2015-02-07 16:40:54

标签: c# php .net xml webclient

我开发的网站上有PHP处理的页面。 它有三个GET方法处理程序:

  • ?模式=检查
  • ?模式= INIT
  • ?模式=查询

处理程序被指定提供1C-Bitrix CMS的导出(但事实并非如此)。第一个两个处理程序从我的C#WebClient中完成了他们的工作:

webClient.Headers.Add(HttpRequestHeader.Authorization,
                                "Basic " + Convert.ToBase64String(
                                ASCIIEncoding.ASCII.GetBytes(
                                "login:pass")));
            var localUrl = String.Concat(url, "?mode=checkauth");

            var response = webClient.DownloadData(localUrl);
            var responseString = Encoding.UTF8.GetString(response);
            if (responseString.Contains("success")) return true;
            return false;

checkauth和init的响应很简单(会话ID和其他字符串)。

但是?mode=query应该生成这种类型的XML(使用Postman获得):

С сайта выгружено 31 из 31 товаров.<?xml version="1.0" encoding="UTF-8"?>
<КоммерческаяИнформация ВерсияСхемы="2.021" ДатаФормирования="2015-02-07T22:39:23">
    <Каталог>
        <Ид>clothes_s1</Ид>
        <ИдКлассификатора>clothes_s1</ИдКлассификатора>
        <Наименование>Одежда</Наименование>
        <Описание>Одежда нашей основной фабрики в Санкт-Петербурге.</Описание>
        <Товары>
            <Товар>
                <Ид>177</Ид>
                <Наименование>Штаны Полосатый Рейс</Наименование>
                <Группы>
                    <Ид>25</Ид>
                </Группы>
                <Описание>Брюки-клеш идеально сидят и подчеркивают стройность фигуры. Модель имеет застежку на молнию. Изделие будет прекрасно гармонировать с любыми предметами гардероба. Длина изделия ок. 100см. Длина по внутреннему шву ок. 83см. Ширина внизу ок. 87см.
                            &lt;div&gt;
                            &lt;br /&gt;
                            &lt;/div&gt;

                            &lt;div&gt;
                            &lt;div&gt;&lt;b&gt;Дополнительное описание:&lt;/b&gt;&lt;/div&gt;

                            &lt;div&gt;
                            &lt;ul&gt;
                            &lt;li&gt;&lt;b&gt;Форма брючин:&lt;/b&gt; Широкие брючины&lt;/li&gt;

                            &lt;li&gt;&lt;b&gt;Вид застежки: &lt;/b&gt;Молния&lt;/li&gt;

                            &lt;li&gt;&lt;b&gt;По назначению: &lt;/b&gt;Повседневные&lt;/li&gt;

                            &lt;li&gt;&lt;b&gt;Сезон: &lt;/b&gt;демисезон&lt;/li&gt;

                            &lt;li&gt;&lt;b&gt;Пол: &lt;/b&gt;Женский&lt;/li&gt;

                            &lt;li&gt;&lt;b&gt;Стиль: &lt;/b&gt;Женственный стиль&lt;/li&gt;

                            &lt;li&gt;&lt;b&gt;Страна бренда:&lt;/b&gt; Россия&lt;/li&gt;

                            &lt;li&gt;&lt;b&gt;Страна производитель:&lt;/b&gt; Россия&lt;/li&gt;
                            &lt;/ul&gt;
                            &lt;/div&gt;
                            &lt;/div&gt;
                        </Описание>
                <Картинка>http://localhost:6448/upload/iblock/3f7/3f751ef6d3624fff3abb9e471d57b210.jpg</Картинка>
                <ЗначенияСвойств>
                    <ЗначенияСвойства>
                        <Ид>331</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>335</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>337</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>BRAND_REF</Ид>
                        <Значение>company2</Значение>
                        <Значение>company3</Значение>
                        <Значение>brand2</Значение>
                        <Значение>brand1</Значение>
                        <Значение>brand3</Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>af49d0e309af4fac506a8a228000efc5</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>103</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>5</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>10</Ид>
                        <Значение>177-77-хх</Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>12</Ид>
                        <Значение>Россия &quot;Grishko&quot;</Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>11</Ид>
                        <Значение>трикотаж</Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>291</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>MORE_PHOTO</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>461</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>36</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>37</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>33</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>34</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>546</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                    <ЗначенияСвойства>
                        <Ид>547</Ид>
                        <Значение></Значение>
                    </ЗначенияСвойства>
                </ЗначенияСвойств>
            </Товар>
            <Товар>
                <Ид>207</Ид>
                <Наименование>Штаны Жизнь в Абстракции</Наименование>
                <Группы>
                    <Ид>25</Ид>
                </Группы>

但是当我打电话给webClient.DownloadData时?模式=来自代码的查询我得到一个空字符串:respond = "" 这是第三种方法:

private string GetData(string url)
        {
            webClient.Headers[HttpRequestHeader.CacheControl] = "no-cache";
            webClient.Headers[HttpRequestHeader.UserAgent]
                = "Mozilla/5.0 (Windows NT 10.0; WOW64) " +
                  "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36";
            webClient.Headers[HttpRequestHeader.Accept] = "*/*";
            webClient.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate, sdch";
            webClient.Headers[HttpRequestHeader.AcceptLanguage] = "en-US,en;q=0.8";
            var localUrl = String.Concat(url, "?mode=query");
            var response = webClient.DownloadData(localUrl);
            var responseString = Encoding.UTF8.GetString(response);

            return responseString;
        }

我经常使用Fiddler来检查请求的标题并使它们相同,但它仍然无法工作。

1 个答案:

答案 0 :(得分:0)

嗯,我很蠢。 经过4个小时的研究总结后,我认为?mode=checkauth我需要存储Cookie并将其发送给initquery

private Tuple<string, string> _cookie;
.
.
.
private bool InitExport(string url)
        {
            webClient.Headers[HttpRequestHeader.Cookie] = String.Concat(_cookie.Item1, "=", _cookie.Item2);
.

问题已经结束。