繁体   English   中英

使用C#的HTTP请求

[英]HTTP requests using c#

我是通过网络/套接字/网络流等进行发送/接收的新手。

我正在制作一个可以与Twitch.tv通信的IRC程序。 它们具有API,并且具有用于获取各种信息的各种请求的示例。

https://github.com/justintv/Twitch-API/tree/master/v3_resources

他们的请求的一个例子是:

curl -H 'Accept: application/vnd.twitchtv.v3+json' \
-X GET https://api.twitch.tv/kraken/chat/kraken_test_user

我已尝试对请求进行一些研究,但我对一些请求有所了解,但是在大多数情况下,我找不到任何资源可以帮助我点击它。

在上面的示例中,该请求的重要部分是什么? 卷曲? -H? 这是一个大命令,还是第一行末尾用\\分隔的两个命令?

然后,最大的问题是,如何使用C#发送类似上述请求的请求?

编辑1:

我也知道我将获得JSON响应。 有内置的东西可以帮助接收/解析JSON吗?

还使用PUT更改一些JSON吗? (API中的某些功能允许PUT)。

对于第一个问题,您询问了哪些重要部分

  1. 它具有application/vnd.twitchtv.v3+jsonaccept标头
  2. 这是一个GET请求
  3. api网址: https://api.twitch.tv/kraken/chat/kraken_test_userhttps://api.twitch.tv/kraken/chat/kraken_test_user

C#中的此请求可能如下所示(可能是因为有多种方法可以实现)

private async Task<object> GetRequest(string url)
{
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.twitchtv.v3+json"));

    var response = await httpClient.GetAsync(url);
    var contents = await response.Content.ReadAsStringAsync();

    return contents;
}

请注意,您发布的链接中的文件是Mark Down文件,Google描述为:

MD或Markdown文档是使用Markdown语言的几种可能的方言之一创建的文本文件。 MD文件使用纯文本格式,但包含定义文本格式的内联文本符号,并且设计用于编写可轻松转换为HTML的纯文本文档。

curl -H 'Accept: application/vnd.twitchtv.v3+json' \
-X GET https://api.twitch.tv/kraken/chat/kraken_test_user

http://curl.haxx.se/docs/manpage.html解释了curl命令是什么,它具有2个开关H和X。在其中引用了链接:

-H,--header

(HTTP)将HTTP发送到服务器时要包含在请求中的额外标头。 您可以指定任意数量的额外标题。 请注意,如果您要添加一个自定义标头,其名称与curl将使用的内部标头之一相同,则将使用外部设置的标头,而不是内部标头。 这使您可以制作比卷发通常更棘手的东西。 如果不完全了解自己在做什么,则不应替换内部设置的标题。 通过在冒号的右侧给出不包含内容的替换内容来删除内部标头,例如:-H“ Host:”。 如果您发送的自定义标头没有值,则其标头必须以分号终止,例如-H“ X-Custom-Header;”。 发送“ X-Custom-Header:”。

curl将确保您添加/替换的每个标头都带有正确的行尾标记,因此您不应将其添加为标头内容的一部分:不要添加换行符或回车符,它们只会弄乱东西为您服务。

另请参见-A,--user-agent和-e,--referer选项。

从7.37.0开始,您需要--proxy-header发送用于代理的自定义标头。

例:

#curl -H“ X-名字:Joe” http://192.168.0.1/

警告:使用此选项设置的标头将在所有请求中设置-即使在执行重定向后也是如此,例如使用-L,--location时。 这可能导致将标头发送到原始主机以外的其他主机,因此,应谨慎使用敏感标头,并结合以下重定向。

可以多次使用此选项来添加/替换/删除多个标题。

“ \\”使下一行添加到第一行。

-X,-请求

(HTTP)指定与HTTP服务器通信时要使用的自定义请求方法。 将使用指定的请求方法代替其他方法(默认为GET)。 阅读HTTP 1.1规范以获取详细信息和说明。 常见的其他HTTP请求包括PUT和DELETE,但是WebDAV等相关技术提供PROPFIND,COPY,MOVE等。

通常,您不需要此选项。 各种GET,HEAD,POST和PUT请求都可以通过使用专用的命令行选项来调用。

此选项仅更改HTTP请求中使用的实际单词,不会更改curl的行为方式。 因此,例如,如果您想发出适当的HEAD请求,则使用-X HEAD将无法满足要求。 您需要使用-I,--head选项。

使用-X设置的方法字符串将用于所有请求,例如,如果您使用-L,则在curl不根据HTTP 30x响应代码更改请求方法时,--location可能会导致意外的副作用-和类似。

(FTP)指定使用FTP进行文件列表时要使用的自定义FTP命令而不是LIST。

(POP3)指定要使用的自定义POP3命令,而不是LIST或RETR。 (在7.26.0中添加)

(IMAP)指定要使用的自定义IMAP命令而不是LIST。 (在7.30.0中添加)

(SMTP)指定要使用的自定义SMTP命令,而不是HELP或VRFY。 (在7.34.0中添加)

如果多次使用此选项,则将使用最后一个。

在C#中,有一个WebRequest类, https ://msdn.microsoft.com/zh-cn/library/456dfw4f( v = vs.110).aspx很好地说明了如何使用它从给定URL获取数据。

至于处理JSON,请查看http://www.newtonsoft.com/json ,这是用于解析JSON响应的相当常用的库。 PUT是HTTP动词,例如GET或POST,用于告诉服务器如何处理请求。 我建议以后在这里发布一系列相当广泛的问题时要小心,因为我看到这是一个班级可能要花一个小时讨论某个地方的事情,我怀疑您的意图是让别人去做作业,对吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM