C#HttpWebRequest 403在BitStamp API Post

时间:2016-08-27 01:49:44

标签: c#

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

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

<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 Forbidden错误

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的帖子,但在大多数情况下看起来都是一样的。但诚然,我不确定我是否正确使用Fiddler。我尝试过Content-Type“multipart / form-data;”使用正确的边框和所有内容写入FormData,没有运气。我试过设置用户代理,但仍然没有运气。我错过了什么?

1 个答案:

答案 0 :(得分:0)

我发现即使抛出异常,如果它是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是我之前使用过的,因此错误。