Yahoo Finance API: удаленный сервер вернул ошибку: (414) Request URI Too Long

Я отправляю запрос на финансирование Yahoo, и мой приведенный ниже код работает нормально, если количество символов не превышает 200. Если символов больше 200, я получаю сообщение об ошибке «Удаленный сервер вернул ошибку: (414) Слишком длинный URI запроса».

Фактических символов более 20000

Можете ли вы предложить возможное решение?

string yahooQuoteUrl = "http://finance.yahoo.com/d/quotes.csv?s=";
string yahooParameters = "&f=sl1d1yxn";
string Url ="";
SqlConnection sqlConnection = new SqlConnection(con1);
SqlCommand sqlCommand = new SqlCommand("SELECT Symbol FROM PM_Securities",sqlConnection);
sqlConnection.Open();
SqlDataReader reader = sqlCommand.ExecuteReader();
GridView2.DataSource = reader;
GridView2.DataBind();
string symbols= GridView2.Rows[0].Cells[0].Text;

string csvData;
    using (WebClient web = new WebClient())
    {
        Url = yahooQuoteUrl + symbols+ yahooParameters;
        csvData = web.DownloadString(Url);
    }


    List<Price> prices = Parse(csvData);
    GridView1.DataSource = prices;
    GridView1.DataBind();

person Leventis1984    schedule 22.11.2013    source источник
comment
Разделить задание на несколько отдельных запросов менее 200?   -  person Dan Puzey    schedule 22.11.2013
comment
Попробуйте использовать POST, а не GET   -  person rhughes    schedule 22.11.2013
comment
я просто обновляю свой код. Мои символы извлекаются из моей базы данных, поэтому я не знаю точного количества символов. у одного из моих клиентов может быть 10000 или у другого клиента может быть 30000 или у другого клиента может быть 100.   -  person Leventis1984    schedule 22.11.2013
comment
Можете ли вы предоставить мне пример использования POST   -  person Leventis1984    schedule 22.11.2013


Ответы (1)


Я разделяю запросы в зависимости от символов, которые у меня есть. Приведенное ниже решение работает хорошо для меня.

  if (count <= 200) {

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText200 + yahooParameters;
            csvData200 = web.DownloadString(Url);
        }

        csvData = csvData200;
        List<Price> prices = Parse(csvData);
        GridView1.DataSource = prices;
        GridView1.DataBind();

    }


    if (count>=201 & count<=400)
    {

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText200 + yahooParameters;
            csvData200 = web.DownloadString(Url);
        }

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText400 + yahooParameters;
            csvData400 = web.DownloadString(Url);
        }

        csvData = csvData200 + csvData400;
        List<Price> prices = Parse(csvData);
        GridView1.DataSource = prices;
        GridView1.DataBind();
    }


    if (count >= 401 & count <= 600)
    {

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText200 + yahooParameters;
            csvData200 = web.DownloadString(Url);
        }

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText400 + yahooParameters;
            csvData400 = web.DownloadString(Url);
        }

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText600 + yahooParameters;
            csvData600 = web.DownloadString(Url);
        }

        csvData = csvData200 + csvData400 + csvData600;
        List<Price> prices = Parse(csvData);
        GridView1.DataSource = prices;
        GridView1.DataBind();

    }



    if (count >= 601 & count <= 800)
    {

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText200 + yahooParameters;
            csvData200 = web.DownloadString(Url);
        }

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText400 + yahooParameters;
            csvData400 = web.DownloadString(Url);
        }

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText600 + yahooParameters;
            csvData600 = web.DownloadString(Url);
        }

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText800 + yahooParameters;
            csvData800 = web.DownloadString(Url);
        }

        csvData = csvData200 + csvData400 + csvData600 + csvData800;
        List<Price> prices = Parse(csvData);
        GridView1.DataSource = prices;
        GridView1.DataBind();

    }

    if (count >= 801 & count <= 1000)
    {

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText200 + yahooParameters;
            csvData200 = web.DownloadString(Url);
        }

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText400 + yahooParameters;
            csvData400 = web.DownloadString(Url);
        }

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText600 + yahooParameters;
            csvData600 = web.DownloadString(Url);
        }

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText800 + yahooParameters;
            csvData800 = web.DownloadString(Url);
        }

        using (WebClient web = new WebClient())
        {
            Url = yahooQuoteUrl + cellText1000 + yahooParameters;
            csvData1000 = web.DownloadString(Url);
        }

        csvData = csvData200 + csvData400 + csvData600 + csvData800 + csvData1000;
        List<Price> prices = Parse(csvData);
        GridView1.DataSource = prices;
        GridView1.DataBind();

    }
person Leventis1984    schedule 18.12.2013