希望你一切都好!
我用 C# 创建了一个每天运行的工具,并且能够从 Cex 网站 (uk.webuy.com) 获取我选择的某些类别中所有产品的价格。我使用这个工具来保存产品的价格历史记录,但有一天,当该工具执行时,它开始出现 403 错误。我无法诊断为什么会发生这种情况,因为该域的其他端点工作完全正常。
这是我过去 6 个月用于请求的代码:
public static List<Box> GetCategoryProducts(List<int> largeCategoriesList)
{
List<Box> boxes = new List<Box>();
foreach (int categoryId in largeCategoriesList)
{
int currentCategoryProducts = 0;
int firstRecord = 1;
int count = 50;
int totalRecords = 0;
int minDelay = 3;
int maxDelay = 6;
int retryDelay = 10; // Retry after 10 seconds if response isn't successful
bool hadError = false;
int retryCount = 0;
do
{
try
{
string weBuyAPILink = $"https://wss2.cex.uk.webuy.io/v3/boxes?firstRecord={firstRecord}&count=50&sortBy=relevance&sortOrder=desc&categoryIds=[{categoryId}]";
var client = new RestClient(weBuyAPILink);
client.Timeout = -1;
var request = new RestRequest(Method.GET);
List<KeyValuePair<string, string>> headerList = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("Accept", "application/json, text/plain, */*"),
new KeyValuePair<string, string>("Refer", "https://uk.webuy.com"),
new KeyValuePair<string, string>("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"),
new KeyValuePair<string, string>("Origin", "https://uk.webuy.com"),
new KeyValuePair<string, string>("Accept-Encoding","gzip, deflate, br")
};
request.AddHeaders(headerList);
IRestResponse response = client.Execute(request);
if (!response.IsSuccessful)
{
Logger.Error($"Request response encountered an error! Error details: {response.StatusCode}");
hadError = true;
Thread.Sleep(retryDelay * 1000); // Retry after 10 seconds
retryCount++;
}
else
{
//PROCESS RESPONSE
//.......
//.......
hadError = false;
var random = new Random();
var delay = random.Next(minDelay * 1000, maxDelay * 1000);
Logger.Info($"Waiting {delay / 1000} seconds before next request...");
Thread.Sleep(delay);
}
}
catch (Exception ex)
{
Logger.Fatal(ex, "Fatal error processing category list!");
// Handle fatal error as needed
hadError = true;
}
} while ((currentCategoryProducts < totalRecords || totalRecords == 0) && !hadError && retryCount < 3); // Retry only 3 times
if (hadError)
{
Console.WriteLine("Unable to get price info");
}
}
return boxes;
}
尝试在浏览器上访问该 URL 将显示一个 Cloudflare 页面,显示我已被阻止并且我无法再访问 webuy.io,但是,例如,访问 产品详细信息 端点仅向我提供特定产品的详细信息,效果很好。
有人能指出我正确的方向吗?我一直在研究 Cloudflare 绕过方法,但我没有在其中投入大量时间,因为我认为这无法解决我的问题。
在构建我的工具时,我研究了这个 GitHub 存储库,因为它有一些关于 API 的深刻信息。
我尝试更改一些请求标头,尝试使用 VPN,还尝试使用 ScraperAPI 和 ScrapeOps 来获取信息而没有收到 403 错误,但无济于事。
我认为“盒子”的端点已被关闭/阻止,因为它对我也不起作用(2024 年 4 月)。我在 Github 上偶然发现了与您相同的 API,并成功地让 API 文档中列出的所有标准调用都正常工作,除了使用 C# 的“盒子”并使用 Postman 进行测试。
我也无法让它带回特定子类别中的所有项目,例如“Xbox 360”(显示所有 Xbox 360 游戏),因此使得该 API 对于库存检查或价格跟踪几乎毫无用处。
您拥有的任何信息都会有帮助。