检查暗号。这里我得到了一个URL
的列表,它们需要报废,并将Html填充到data.datas
全局类的Html
属性中。我已经尝试过使用RestSharpClient.GetAsync
来实现它,但我不知道如何才能将它转到URL
的所有列表中,其中包含data.datas
public class Data
{
public int Id { get; set; }
public string Url { get; set; }
public string Html { get; set; }
public static List<Data> Datas = new List<Data>();
}
class Program
{
static void Main(string[] args)
{
//seeding 10 demo data
for (int i = 0; i < 10; i++)
{
Data.Datas.Add(new Data
{
Id = i,
Url = "https://www.httpbin.org",
Html = null,
});
}
var task = Task.Run(async () =>
{
await DoScrapeAsync();
});
do
{
} while (!task.IsCompleted);
Console.WriteLine("compleated");
Console.ReadLine();
}
static async Task DoScrapeAsync()
{
var thisData = Data.Datas.FirstOrDefault();//doing firstOrDefault() which is wrong. I have to take whole list to scrape
var client = new RestClient("http://api.scraperapi.com/?api_key=c3df2_fake_4d5e&url=" + thisData.Url + "/ip&country_code=us");
RestRequest req = new RestRequest(Method.GET);
//string html = client.Execute<string>(req).Content;
var html = await client.GetAsync<string>(req);
thisData.Html = html;
Console.WriteLine(html);
}
}
使doscrapeasync
接受单个data
实例:
static async Task DoScrapeAsync(Data data)
{
string url = $"http://api.scraperapi.com/?api_key=c3df2_fake_4d5e&url={data.Url}/ip&country_code=us";
var client = new RestClient(url);
RestRequest req = new RestRequest(Method.GET);
var html = await client.GetAsync<string>(req);
data.Html = html;
Console.WriteLine(html);
}
然后可以在main
中这样调用:
static async Task Main(string[] args)
{
//seeding 10 demo data
for (int i = 0; i < 10; i++)
{
Data.Datas.Add(new Data
{
Id = i,
Url = "https://www.httpbin.org",
Html = null,
});
}
await Task.WhenAll(Data.Datas.Select(DoScrapeAsync));
Console.WriteLine("completed");
Console.ReadLine();
}
几点:您需要使main
Async
能够等待对DoscrapeAsync
的每次调用。
此外,使用task.run
也是完全不必要的,因为这只是将工作卸载到线程池中,在您的情况下什么也没有实现。
我调用了多个ajax调用,但代码只在所有ajax调用执行之后才到达API。 JavaScript: AppFactory API 链接工作很好,但我需要运行两个独立,我真的想知道发生了什么。 谢谢!!!
最近,我一直试图从一个网站上获取大量的定价,从一个页面开始,每个项目的页面都链接到起始页面。我希望运行一个脚本,允许我单击某个项目的框,删除该项目的定价和描述,然后返回起始页并继续该循环。然而,有一个明显的问题,我在刮掉第一件物品后遇到了。返回起始页后,容器没有定义,因此出现了一个陈旧的元素错误,该错误会中断循环并阻止我获取其余的项。这是我使用的示例代码,希望能够一个接一个地刮去所有项目。 然而,
但是,如下所示的调用序列使用相同的TCP连接。 我还没有对此进行调试,但OkHttp似乎迫使我们首先在主线程上发出阻塞HTTP请求,以获得TCP连接上下文,然后与其他线程共享该上下文?或者,我是不是漏掉了什么?
我正在开发一个移动应用程序,现在我正在进行身份验证。在我访问我的主页之前,我需要访问我构建的API上的各种endpoint,然后才能向用户显示数据。 在Postman中测试时,所有endpoint都返回了正确的数据,但是当我在应用程序中使用它时,我在第二次异步调用中得到了一个值。 我确信这与这些呼叫的顺序有关,所以我只是在寻找一些帮助,如何在开始另一个呼叫之前正确地等待一个呼叫完成。
RestSharp 进行 rest/http 请求的 .NET 工具库。 功能 支持.NET 3.5+,Silverlight 5,Windows Phone 8,Mono,MonoTouch,Mono for Android 容易安装,NuGet 适合大多数 .NET 风格 支持使用 NuGet 的大多数 .NET 风格的强命名 自动 XML 和 JSON 反序列化 支持通过 ISerializ
我试图写一个异步函数,使多个读取,等待所有完成,然后返回JSON结果作为一个数组。这是我到目前为止所拥有的: 文件1。js 应用程序编程接口。js util.js 当执行在调试器处暂停时,我使用Chrome的开发工具检查,它正确地是由3个对象组成的数组,但如果我检查,它奇怪地在控制台中返回一个