cURL vs RestSharp vs Rest.net与Tumblr的行为有所不同

时间:2018-09-19 11:15:00

标签: c# curl tumblr restsharp

由于他们在前面介绍了GDPR / Advertisers页面,因此我试图从Tumblr API中获取数据并获得不同的结果。该页面应该显示一次并设置一个cookie。

使用cUrl:

curl -i -v -X GET "https://nochillmemes.tumblr.com/api/read/json?type=photo&num=50&start=1"

我得到正确的结果。

使用Rest.Net:

var Client = new RestClient("https://nochillmemes.tumblr.com");
var Request = new RestRequest("/api/read/json?filter=text&type=photo&num=50&start=1", Http.Method.GET);
var R = Client.Execute(Request);

返回GDPR页面,但是:

var Client = new RestClient("https://nochillmemes.tumblr.com");
var Request = new RestRequest("/api/read/json?filter=text&type=photo&num=50&start=1", Http.Method.GET);
Request.AddHeader("user-agent", "curl/7.54.0");
var R = Client.Execute(Request);

返回正确的数据!因此tumblr会根据用户代理返回不同的结果。

使用RestSharp:

var Client = new RestClient("https://nochillmemes.tumblr.com");
var Request = new RestRequest("/api/read/json?filter=text&type=photo&num=50&start=1", Method.GET);
var R = Client.Execute(Request);

返回GDPR页面,并且:

var Client = new RestClient("https://nochillmemes.tumblr.com");
var Request = new RestRequest("/api/read/json?filter=text&type=photo&num=50&start=1", Method.GET);
Request.AddHeader("user-agent", "curl/7.54.0");
var R = Client.Execute(Request);

仍返回GDPR页面...

因此,总而言之:

  • cURL给了我API结果
  • Rest.Net仅在假装为cURL的情况下为我提供API结果
  • Restsharp总是给我GDPR页面

这可能是什么原因?

我试图了解正在发生的事情,因为我不想在不知道为什么的情况下依靠有效的方法:)

1 个答案:

答案 0 :(得分:1)

问题在于您如何在RestSharp中设置用户代理标头。

根据this github issue,而不是:

Request.AddHeader("user-agent", "curl/7.54.0");

您应该使用:

Request.UserAgent = "curl/7.54.0";