【问题标题】:RestSharp response forbidden禁止 RestSharp 响应
【发布时间】:2018-05-30 02:09:48
【问题描述】:

我尝试向https://c-cex.com/t/prices.json发送一个简单的请求

如果我在浏览器中使用此 url,则会显示正确的响应,但如果我使用 RestRequest 发出相同的请求,我会一直收到 403 错误 Forbidden。我尝试 HttpClient,WebRequest 我得到同样的错误

我将标头与用户代理放在一起,没有缓存和许多其他值,但没有工作

对这个问题有什么想法吗?

Dim url As String = "https://c-cex.com/t/prices.json"
Dim client As New RestSharp.RestClient(url)
Dim request = New RestRequest(url, Method.GET)
Dim response = client.Execute(request)

使用 apisign 请求更新代码

Dim nonce As String = CInt((DateTime.UtcNow - New DateTime(1970, 1, 1)).TotalSeconds).ToString

        Dim url As String = "https://c-cex.com/t/api.html?a=getbalance&currency=BTC&apikey=" & API_KEY & "&nonce=" & nonce


        Dim keybytes() = UnicodeEncoding.ASCII.GetBytes(API_SECRET)
        Dim hs As System.Security.Cryptography.HMACSHA512 = New System.Security.Cryptography.HMACSHA512(keybytes)
        Dim urlbytes() = UnicodeEncoding.ASCII.GetBytes(url)

        Dim sh() = hs.ComputeHash(urlbytes)    

        Dim client As New RestSharp.RestClient(url)            

        Dim request = New RestRequest(url, Method.GET)
        request.AddHeader("Cache-Control", "no-cache")
        request.AddHeader("apisign", HttpUtility.UrlEncode(ToHexString(sh)))    
        Dim response = client.Execute(request)

【问题讨论】:

    标签: api request restsharp


    【解决方案1】:

    我在没有提供标头信息的情况下得到响应,并且看起来给定的代码在 VB 和 C# 中对我来说可以正常工作。作为最佳实践,需要在 RestClient 中指定基本 URL,在 RestRequest 中指定相对 URL。

    请在不添加请求头信息的情况下重新检查

    VB:

      Imports RestSharp
    
    Module Module1
        Sub Main()
    
            Dim host As String = "https://c-cex.com"
            Dim endpoit As String = "t/prices.json"
            Dim client As New RestSharp.RestClient(host)
            Dim request = New RestRequest(endpoit, Method.GET)
            Dim response = client.Execute(request)
    
            Console.WriteLine("Response Body " + response.Content)
            Console.WriteLine("Response Code " + response.StatusDescription)
    
        End Sub
    End Module
    

    C#:

        String host = "https://c-cex.com";
        String endpoint = "t/prices.json";
    
        RestClient _restClient = new RestClient(host);
    
        var request = new RestRequest(endpoint, Method.GET);
        var response = _restClient.Execute(request);
    
        Console.WriteLine("Response Body :"+response.Content);
        Console.WriteLine("Response Status Code :" + response.StatusDescription);
    

    【讨论】:

    • 感谢您的回复 Subburaj。我复制/粘贴您的代码并运行并收到相同的错误“状态代码:禁止,内容类型:文本/html;字符集 = UTF-8,内容长度: -1)”。我不知道,因为我收到了这个错误。
    • 看起来,访问上述 URI(Captcha Authentication)时出现随机禁止错误。我能够通过邮递员、浏览器和上面的脚本成功地获得响应。但不幸的是,我在浏览器和邮递员中收到验证码身份验证错误。我附上了浏览器和邮递员的快照错误
    • 是的,这是个问题!阅读使用散列 api url 与邮递员单击“我不是机器人”后我可以连接的 api 文档,但在代码中我不能。我尝试使用 RestClient 的 cookie 容器,什么都没有!
    • 是的,我有两个邮递员,一个是 chrome 扩展,一个是 windows 程序。在 chrome 中没有 CODE 选项,在 windows 应用程序中,我收到与您相同的消息,绕过“我不是机器人”。
    • 生成代码为 var client = new RestClient("c-cex.com/t/… var request = new RestRequest(Method.POST); request.AddHeader("Postman-Token", "c24b304c-c794-402d- a01d-e3995671e87e"); request.AddHeader("Cache-Control", "no-cache"); request.AddHeader("apisign", "88d7eba583b828b5asdasdasdasd4e2617eef51616070c8320b0653c0b9c4eab15de89201de0f"); IRestResponse=client
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多