cURL vs RestSharp vs Rest.net 与 Tumblr 的行为不同
cURL vs RestSharp vs Rest.net behaving differently with Tumblr
我正在尝试从 Tumblr API 获取数据并得到不同的结果,因为他们在前面引入了 GDPR/Advertisers 页面。该页面应该出现一次并设置一个 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);
returns 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);
returns正确的数据!所以 tumblr returns 基于用户代理的不同结果。
使用 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);
returns 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);
仍然是 returns GDPR 页面...
所以,总结一下:
- cURL 给我 API 结果
- Rest.Net 只有当它伪装成 cURL
时才会给我 API 结果
- Restsharp 总是给我 GDPR 页面
这可能是什么原因?
我正在尝试了解正在发生的事情,因为我不想在不知道为什么的情况下依赖某些有效的东西:)
问题在于您如何在 RestSharp
中设置用户代理 header。
根据 this github issue,而不是:
Request.AddHeader("user-agent", "curl/7.54.0");
你应该使用:
Client.UserAgent = "curl/7.54.0";
我正在尝试从 Tumblr API 获取数据并得到不同的结果,因为他们在前面引入了 GDPR/Advertisers 页面。该页面应该出现一次并设置一个 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);
returns 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);
returns正确的数据!所以 tumblr returns 基于用户代理的不同结果。
使用 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);
returns 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);
仍然是 returns GDPR 页面...
所以,总结一下:
- cURL 给我 API 结果
- Rest.Net 只有当它伪装成 cURL 时才会给我 API 结果
- Restsharp 总是给我 GDPR 页面
这可能是什么原因?
我正在尝试了解正在发生的事情,因为我不想在不知道为什么的情况下依赖某些有效的东西:)
问题在于您如何在 RestSharp
中设置用户代理 header。
根据 this github issue,而不是:
Request.AddHeader("user-agent", "curl/7.54.0");
你应该使用:
Client.UserAgent = "curl/7.54.0";