【问题标题】:How to capture Json from web site using c#如何使用 C# 从网站捕获 Json
【发布时间】:2020-09-15 07:38:31
【问题描述】:

我已付费订阅 Seeking Alpha,并拥有一个 cookie,可让我从 https://seekingalpha.com/symbol/AAPL/financials-data?period_type=quarterly&statement_type=income-statement&order_type=latest_left&is_pro=True 获取完整数据

我想使用 C# 收集 JSON 响应

下面是我可怕的代码

        string cookie = "my super secret cookie string";


        var request = new RestRequest(Method.GET);
        request.AddHeader("content-type", "application/json");
        request.AddHeader("Accept", "*/*");
        request.AddHeader("User-Agent","Mozilla/5.0");
        request.AddHeader("X-Requested-With", "XMLHttpRequest");
        string url = "https://seekingalpha.com/symbol/AAPL/financials-data?period_type=quarterly&statement_type=income-statement&order_type=latest_left&is_pro=True";

                    request.AddParameter("cookie", cookie, ParameterType.Cookie);

        var client = new RestClient(url);

        var queryResult = client.Execute(request);

        Console.WriteLine(queryResult.Content);

我怎样才能让它返回 JSON 给我?我得到了一些东西,但不是我想要的 JSON

【问题讨论】:

  • dotnetfiddle.net/jebgbn 这是一个fiddle,其代码与您在question 中发布的代码完全相同。您可以检查它是否返回json。奇怪的是,如果您尝试几次,它将开始在某些响应中返回 html。然后再次返回json
  • 是的。我想我需要以某种方式进行身份验证。我有一个 cookie 字符串,只需要以某种方式传递它

标签: c# rest restsharp


【解决方案1】:

尝试将您的 Access 标头更新为 application/json

request.AddHeader("Accept", "application/json");

Accept 表示客户端可以接受什么样的来自服务器的响应

您可以从Header parameters: “Accept” and “Content-type” in a REST context 获取有关Accept 的更多信息

【讨论】:

  • 好主意,但事实并非如此。我想我设置不正确。应该是request.AddParameter("cookie", cooki1, ParameterType.Cookie); 还是request.AddCookie("machine_cookie", cooki1)
  • 好的。当server 以多种格式返回数据且默认格式不是json 时,将需要Accept = application/json。根据您的评论,您似乎对Accept 没有问题。
  • 我把它改成了application/json。响应为空
【解决方案2】:

看了一会,终于明白了。为了所有人的利益:

    private bool FinancialStatement(string symbol, string statement, string period)
    {
        var target = $"{BASE_URL}{symbol}/financials-data?period_type={period}&statement_type={statement}&order_type=latest_left&is_pro=True";

        var client = new RestClient(target);

        client.Timeout = -1;
        var request = new RestRequest(Method.GET);
        request.AddHeader("Cookie", MACHINE_COOKIE);
        IRestResponse response = client.Execute(request);
        dynamic responseObj;
        try
        {
            responseObj = JsonConvert.DeserializeObject(response.Content);
        }
        catch (Exception)
        {
            return false;
        }

        return response.IsSuccessful;
    }

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多