【问题标题】:Need to read a stream from a URL, changing a "page" attribute in URI until it returns "No records found" string需要从 URL 读取流,更改 URI 中的“页面”属性,直到它返回“未找到记录”字符串
【发布时间】:2020-02-12 16:40:07
【问题描述】:

我正在开发一个 C# .NET Core 控制台应用程序,用于从 URL-RPC 网关获取数据。我可以很好地检索数据并将其写入文件 - 只是在开始增加我正在调用的 URI 中的“页码”属性的逻辑时遇到了一些麻烦,直到它不再返回数据和字符串“没有找到记录。”每个“页面”数据大约有 200 条记录,所以我需要增加 URL 中的页码,直到它返回该字符串。

这是我的基本代码(这包括一个控制台写入行,用于验证以进行调试,稍后我还有其他方法可以将数据写入文件。)

string rpcURL;
rpcURL = "https://api.myWebsite.com/urlrpc?method=getPlacementReport&username=" + userName + "&password=" + passWord + "&class_code=" + classCode + "&from_date=" + startDate + "&to_date=" + endDate + "&page_num=1";

Console.WriteLine(rpcURL);

WebClient client = new WebClient();
client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0)";
var stream = client.OpenRead(rpcURL);
StreamReader sr = new StreamReader(stream);
string s = sr.ReadToEnd();

Console.WriteLine(s);

我知道我需要创建一个变量来增加结尾的“page_num=NUMBER”部分——但我需要将它增加 +1,直到流阅读器准确地读取“未找到记录”。

有什么优雅的方法可以做到这一点吗?我知道基本上我需要使用递增 +1 计数器执行 if/then 语句,但仅此而已。

【问题讨论】:

    标签: c# .net console-application xml-rpc


    【解决方案1】:

    您应该能够通过一个简单的while 循环来完成此操作。假设 StreamReader 预计会返回确切的字符串 No records found,您可以使用类似于以下内容的内容。

    WebClient client = new WebClient();
    client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0)";
    
    string rpcURL;
    string s = '';
    int page = 0;
    while (s != 'No records found') {
        rpcURL = "https://api.myWebsite.com/urlrpc?method=getPlacementReport&username=" + userName + "&password=" + passWord + "&class_code=" + classCode + "&from_date=" + startDate + "&to_date=" + endDate + "&page_num=" + page;
        Console.WriteLine(rpcURL);
        using(var stream = client.OpenRead(rpcURL)) // both Stream and StreamReader
        using(var sr = new StreamReader(stream))    // need to be disposed.
        {
            s = sr.ReadToEnd();
    
            Console.WriteLine(s);
        } 
        page++;
    }
    
    

    【讨论】:

    • 太棒了!谢谢,这就像一个魅力。在随后的页码(2、3、++)上出现一些错误的标题错误,因此它没有返回数据,但我认为这是一个完全不同的问题。非常感谢!
    • 只是一个更新:必须将 Webclient 的 Header.Add 放入 while 语句中,然后一切正常。再次感谢!
    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2016-07-14
    • 2019-05-25
    • 2013-07-27
    • 2017-08-29
    相关资源
    最近更新 更多