1

我与 CloudFlare 后面的服务器通信。我很少从服务器收到错误,就好像它没有收到我的 HTTP POST 请求的内容一样。它很少发生(可能是 1-2%)。此外,如果我只是立即重新发送相同的请求,它在大多数 (~99%) 情况下都可以正常工作。

当服务器不在 CloudFlare 之后或他们使用其他类似服务时,我对服务器没有任何问题。此外,如果服务器临时移出 CloudFlare,问题就会消失。我在 CloudFlare 后面的另一台服务器上遇到了完全相同的问题。

我正在使用 C# .NET 4.5。连接是安全的 (HTTPS)。

我已经使用 Fiddler 捕获了 HTTP 请求/响应。我认为“坏”和“好”请求之间完全没有区别。

POST https://btc-e.com/tapi HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Key: ****************
Sign: e94eb19d4cdf29b6629c2acc6934bacdf502bdc93c14a44521ef9d64823f4ab560ef14fce468b7df897f0b2f2f4677c4191801f7453c784bda7fd0ede4b95f59
Host: btc-e.com
Content-Length: 42

nonce=1362901653&method=OrderList&active=1

======================================================

HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Sun, 10 Mar 2013 08:41:16 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.4.12
X-Frame-Options: DENY
Expires: Sun, 17 Mar 2013 08:40:56 GMT
Cache-Control: max-age=604800
Set-Cookie: __cfduid=****************; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.btc-e.com
CF-RAY: 4ceb4731fea02d9

10e
{"success":0,"error":"*************"} 0
0

我正在使用下面的代码,但我认为它不相关:

byte[] data = Encoding.ASCII.GetBytes(BuildPostData(args)); //values are properly encoded using HttpUtility.UrlEncode

HttpWebRequest request = WebRequest.CreateHttp(ApiUri);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
request.Timeout = 5000;
request.Headers.Add("Key", Key);
request.Headers.Add("Sign", sign);    

using (Stream outStream = request.GetRequestStream())
{
    outStream.Write(data, 0, data.Length);
    outStream.Flush();
}

using (WebResponse response = request.GetResponse())
using (var streamReader = new StreamReader(response.GetResponseStream()))
    result = JObject.Parse(streamReader.ReadToEnd());

我已经尝试过但没有成功:

  • HTTP 1.1 / 1.0
  • KeepAlive 开/关
  • 预计 100 次继续开/关
  • 启用/禁用 Cookie
  • 发送分块开/关

请问有什么想法吗?

更新:2013-05-01 问题消失了。客户端没有变化。3-4周后就消失了...

4

0 回答 0