c# HttpWebRequest 403在BitStamp API Post上被禁止

本文关键字:Post 禁止 API BitStamp HttpWebRequest | 更新日期: 2023-09-27 18:04:09

我正在使用BitStamp进行比特币交易,我正在尝试使用API检查我的余额。

当我使用Postman测试API时,使用form-data或x-www-form-urlencoded而不需要身份验证,两者都可以正常工作。即使只是通过浏览器发布,它也可以完美地工作:

<html>
    <head><title>Test</title></head>
    <body>
        <form action="https://www.bitstamp.net/api/v2/balance/btcusd/" method="post">
            <input type="text" name="key" value="SomeKey" />
            <input type="text" name="signature" value="SomeSignature" />
            <input type="text" name="nonce" value="123456789" />
            <input type="submit" value="Test" />
        </form>
    </body>
</html>

但这样做与HttpWebRequest我一直得到一个异常403禁止错误

try
{
    HttpWebRequest getApiRequest = (HttpWebRequest)HttpWebRequest.Create("https://www.bitstamp.net/api/v2/balance/btcusd/");
    getApiRequest.Method = "POST";
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    getApiRequest.ContentType = "application/x-www-form-urlencoded;";
    string FormData = "key=SomeKey&signature=SomeSignature&nonce=123456789"
    StreamWriter formWrite = new StreamWriter(getApiRequest.GetRequestStream());
    formWrite.Write(FormData);
    formWrite.Flush();
    formWrite.Close();
    StreamReader resultReader = new StreamReader(getApiRequest.GetResponse().GetResponseStream());
    string result = resultReader.ReadToEnd();
    resultReader.Close();
    return result;
 }
 catch (Exception e)
 {
    return e.Message;
 }

我看了在小提琴手的帖子,但在大多数情况下,它似乎是一样的。但不可否认,我不确定我是否正确地使用了Fiddler。我已经尝试过内容类型"多部分/表单数据;"与FormData写正确的边界和一切,没有运气。我试过设置一个用户代理,仍然没有运气。我错过了什么?

c# HttpWebRequest 403在BitStamp API Post上被禁止

我发现,即使抛出异常,如果是web异常,我仍然可以得到响应。

catch (WebException we)
 {
    StreamReader resultReader = new StreamReader(we.Response.GetResponseStream());
    string result = resultReader.ReadToEnd();
    resultReader.Close();
    return result;
 }
 catch (Exception e)
 {
    return e.Message;
 }

从响应中,我看到我使用的nonce是我以前使用过的,因此出现了错误。