【问题标题】:Why I cannot access Yobit API using webclient为什么我无法使用 webclient 访问 Yobit API
【发布时间】:2018-02-07 10:39:18
【问题描述】:

以前工作的代码。

有问题的网址是

https://yobit.net/api/3/info

它适用于 IE。它曾经与 webclient 一起工作。它现在在 webclient 中不起作用。我想知道问题是什么

它突然停止工作。所以我正在检查

    Try
        Dim wc = New WebClient
        wc.Headers.Add("Accept", "text/html, application/xhtml+xml, image/jxr, */*")
        wc.Headers.Add("Accept-Encoding", "gzip, deflate")
        wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko")
        wc.Headers.Add("Accept-Language", "en-US,en;q=0.5")
        wc.DownloadString(URL)
    Catch ex As Exception

    End Try

我也试过简单的版本。不工作

    Try
        Dim wc = New WebClient
        wc.DownloadString(URL)
    Catch ex As Exception

    End Try

在这两种情况下 yobit 都会抛出 503 access denied 异常

我用fiddler,尝试用internetexplorer直接访问

效果很好

GET https://yobit.net/api/3/info HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
Accept-Language: en-US,en;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: yobit.net
Connection: Keep-Alive
Cookie: __cfduid=de63c60d603f271520b9ee58dfdd257061517932785; cf_clearance=7e58588df28b267842f753567dcdc475d29679a6-1517932789-86400; locale=en

如果我使用 webclient 这是标题

GET https://yobit.net/api/3/info HTTP/1.1
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.5
Accept: text/html, application/xhtml+xml, image/jxr, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: yobit.net
Connection: Keep-Alive

几乎完全相同。

让我试试另一个网址

http://google.com

GET http://www.google.com/ HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
Accept-Language: en-US,en;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: www.google.com
Connection: Keep-Alive
Cookie: NID=121=GUd4VKHT_gcwUx-hK39mphuCg93Q_W2fL_yCc-JO3AJkgh74EGajif0537eraLK8ns2EdEQPexOOeBxSlOxVrj8t_AVn21FRme2hAxuLXz4F8aCZExIzME4jaYMBuUp_lnak5Q; OGPC=19004116-3:; 1P_JAR=2018-1-9-7

如果我使用网络客户端

GET http://google.com/ HTTP/1.1
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.5
Accept: text/html, application/xhtml+xml, image/jxr, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: google.com
Connection: Keep-Alive

两者都有效。

【问题讨论】:

  • 好像需要Cookie,实际上是在IE中发送的,而不是在使用代码时发送的。这是经过身份验证的端点吗?因为我没有看到你提供任何这些信息
  • 不,它不是经过身份验证的端点。我真的不认为 cookie 是问题所在。这是一个 API。我可以清除 cookie,我敢打赌它仍然可以在 IE 中使用
  • 我最后检查了它在 curl 中工作,所以确保它不是 cookie 问题。你能检查一下它是否发生在一些 .NET 框架升级或什么之后?你能改变框架版本吗
  • 它适用于 curl?嗯....
  • 那个 yobit 东西是唯一不起作用的东西。所有其他 URL 都可以正常使用 webclient,因为它应该是

标签: webclient


【解决方案1】:

这里可能有不同的问题

框架版本

您最近更改了框架版本,但存在一些导致其无法工作的问题。您可以更改框架版本,看看是否有帮助

数据压缩

WebClient 默认情况下不进行解压缩,如果可用,您添加标头以请求gzip 数据。现在有可能该站点之前没有启用 gzip,这使它对您有用,现在他们已经启用了 gzip 响应。你可以通过改变来解决这个问题

wc.Headers.Add("Accept-Encoding", "gzip, deflate")

wc.Headers.Add("Accept-Encoding", "deflate")

或者如果您希望数据仅以压缩形式出现,那么您可以启用自动解压缩,如下代码所示

class Program
{
    class MyWebClient : WebClient
    {
        protected override WebRequest GetWebRequest(Uri address)
        {
            var request = base.GetWebRequest(address) as HttpWebRequest;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            return request;
        }
    }
    public static void Main(string[] args)
    {
        var URL = "https://yobit.net/api/3/info";
        var wc = new WebClient();
        wc.Headers.Add("Accept", "text/html, application/xhtml+xml, image/jxr, */*");
        wc.Headers.Add("Accept-Encoding", "gzip, deflate");
        wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko");
        wc.Headers.Add("Accept-Language", "en-US,en;q=0.5");
        Console.WriteLine(wc.DownloadString(URL));
        // TODO: Implement Functionality Here

        Console.Write("Press any key to continue . . . ");
        Console.ReadKey(true);
    }
}

上面的例子是C#而不是VB.NET,但是你可以很容易地转换它

【讨论】:

  • 你试过了吗?它在您的系统中有效吗?就我而言,yobit 会发送 503 错误
  • @J.Chang,是的,它已经工作了,我测试过,然后才在这里发布
  • 你的答案是正确的。更改目标框架以某种方式解决了问题。我不知道为什么。
猜你喜欢
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 2015-01-11
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
相关资源
最近更新 更多