使用c#的HTTP请求

本文关键字:请求 HTTP 使用 | 更新日期: 2023-09-27 18:19:32

我对通过网络/套接字/网络流等发送/接收相当陌生

我正在制作一个IRC程序,可以与Twitch.tv通信。他们有一个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)。

使用c#的HTTP请求

对于问题的第一部分,您问的重要部分是什么

  1. 它具有application/vnd.twitchtv.v3+jsonaccept标头
  2. 这是GET请求
  3. api url:https://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文件

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命令是什么,然后有两个开关,H和X。其中引用链接:

-H、 --标头

(HTTP)向服务器您可以指定任意数量的额外标头。请注意,如果应该添加一个与curl将使用的内部标头,将使用外部设置的标头而不是内部的。这让你变得更加棘手比卷曲正常情况下要多的东西。你不应该在内部更换在不完全清楚自己在做什么的情况下设置标题。去除通过在冒号的右侧,如:-H"主机:"中所示。如果您发送自定义没有值的标头,则其标头必须以分号,例如-H"X-Custom-Header;"以发送"X-Custom-Header:"。

curl将确保添加/替换的每个标头都发送适当的行结束标记,因此不应将其添加为表头内容:不要添加换行符或回车符,它们会只会把事情搞砸。

另请参阅-A、--user-agent和-e、--referer选项。

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

示例:

#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请求中使用的实际单词不会改变卷曲的行为方式。例如,如果你想发出正确的HEAD请求,使用-X HEAD是不够的。你需要使用-I,--head选项。

用-X设置的方法字符串将用于所有请求例如,如果使用-L,--location可能会导致意外curl没有根据HTTP 30x响应代码-以及类似代码。

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

(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/en-CA/library/456dfw4f(v=vs.110).aspx提供了一个很好的示例,说明如何使用从给定的URL获取数据。

至于处理JSON,请查看http://www.newtonsoft.com/json这是一个相当常见的库,用于解析JSON响应。PUT将是HTTP谓词,类似于GET或POST,用于告诉服务器如何处理请求。我建议以后在这里发布一系列相当广泛的问题时要小心,因为我认为这是一个班级可能会花一个小时讨论的问题,我怀疑你的意图是让别人做你的家庭作业,对吧?