【问题标题】:HTTP requests using c#使用 c# 的 HTTP 请求
【发布时间】:2015-10-27 16:51:03
【问题描述】:

我对通过网络/套接字/网络流等发送/接收比较陌生。

我正在制作一个可以与 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)。

【问题讨论】:

标签: c# httprequest httpresponse


【解决方案1】:

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

  1. 它有一个accept 标头application/vnd.twitchtv.v3+json
  2. 这是一个GET 请求
  3. API地址: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;
}

【讨论】:

    【解决方案2】:

    请注意,您发布的链接中的文件是 Google 描述的 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 命令是什么,它有 2 个开关,H 和 X。在哪里引用链接:

    -H, --header

    (HTTP) 发送 HTTP 到 服务器。您可以指定任意数量的额外标头。请注意,如果您 应该添加一个与其中一个同名的自定义标题 内部的 curl 将使用,您的外部设置的标题将被使用 而不是内部的。这使您可以变得更加棘手 比 curl 通常会做的事情。你不应该在内部更换 在完全不知道自己在做什么的情况下设置标题。消除 通过在没有内容的情况下进行替换来生成内部标题 冒号右侧,如:-H "Host:"。如果您发送自定义 没有值的标头,那么它的标头必须以 分号,例如 -H "X-Custom-Header;"发送“X-Custom-Header:”。

    curl 将确保您添加/替换的每个标头都与 适当的行尾标记,因此您不应将其添加为 标题内容:不要添加换行符或回车,它们会 只会为你搞砸。

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

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

    例子:

    # curl -H "X-First-Name: Joe" http://192.168.0.1/

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

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

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

    -X, --request

    (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,--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,用于告诉服务器如何处理请求。我建议将来在此处发布相当广泛的问题时要小心,因为我可以看到这是一个班级可能会花一个小时涵盖某个地方的东西,我怀疑你的意图是让其他人做你的作业,对吧?

    【讨论】:

      猜你喜欢
      • 2020-08-30
      • 2016-08-06
      • 2014-07-04
      • 2011-12-07
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 2015-03-15
      相关资源
      最近更新 更多