从c#

时间:2017-01-07 20:02:11

标签: c# websocket webclient webrequest

在尝试解析/使用图表中的数据之前,我正试图将以下网址中的json数据添加到C#项目中:

  

https://cex.io/api/ohlcv/hd/20160228/BTC/USD

我实际上是通过带有websocket的sendin json请求检索json数据但由于某种原因无法获取任何数据。所以我决定在不提供任何json请求的情况下获取数据,因为链接很简单。但是无论我尝试了什么,我最终得到了空的返回或错误。有一点我设法将大量数据添加到ListBox(看起来像一个完整的html页面,我需要一些数据,但我无法理解整个HTML代码也来自,因为链接只有json)但这也没用。试用时

使用 HttpWebRequest

WebRequest 即使使用正确的system.net.http也无法识别WebRequest,其余包括所有其他内容。(尝试手动添加到References ..但他们已经在清单上检查了) WebClient 会返回空或无用的对象或变量类型名称。 HttpClient 也无法正常工作,但无法记住它无法识别的内容。当我触底时,我甚至试图放置一个 webBrowser 对象并尝试从那里读取它,但后来注意到这应该不那么难,并决定问。

这是我到目前为止所做的:

  //HttpClient client3 = new HttpClient();
                             string url = textBox8.Text + listBox3.GetItemText(listBox3.SelectedItem) + listBox4.GetItemText(listBox4.SelectedItem);

                             MessageBox.Show(url);


                             //System.Uri uri = new System.Uri(url);
                             //webBrowser1.Url = uri;

                             System.Net.WebClient client8 = new System.Net.WebClient();
                             //client8.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"); //I dont know if this was needed but seen it on a different example and just added.
                             var html = client8.DownloadString(url);   //returns empty
                             var html2 = client8.DownloadData(url); //adds the line "System.Byte[]"
                             var html3 = client8.OpenRead(url); //adds something like "System.blabla.connectstream"
                             MessageBox.Show(html);


                             listBox1.Items.Add(html2.ToString());
                             listBox1.Items.Add(html3);

如果有人可以提供帮助,我会很感激。

2 个答案:

答案 0 :(得分:0)

使用WebClient很好

var client = new System.Net.WebClient();
var jsondata = client.DownloadString(url);

会做你想做的事。我已经使用提供的url测试了它,并且它不返回空字符串,而是返回json数据。 我认为从输入控件创建它时可能会损坏url。您可以验证使用的网址实际上是您在此处发布的网址吗?也许您在用于创建网址的最后两个字符串之间缺少/

答案 1 :(得分:0)

@berkdi,你是对的。 MessageBox.Show 显示一个空字符串。但实际上,您的 html 字符串是正确的,您可以通过将内容写入文件来查看它 比如File.WriteAllText("myfile.txt", html);

下面的代码(显示文本的前3000个字符时)也适用

System.Net.WebClient client8 = new System.Net.WebClient();
var html = client8.DownloadString("https://cex.io/api/ohlcv/hd/20160228/BTC/USD");
Console.WriteLine(html);
MessageBox.Show(html.Substring(0, 3000));

抱歉,您遇到 MessageBox.Show

错误/奇怪行为/错误实施

修改

这似乎是Windows控件的常见问题,并非设计用于显示非常长的多行数据......