在 Racket 中发送 HTTP POST

Sending HTTP POST in Racket

我正在尝试通过 Racket 中的 http/post 发送一个字符串,这是我在阅读 Racket HTTP Client Documentation

之后到目前为止所尝试的
#lang racket

(require net/http-client)

(define
  myUrl "https://something.com")

(http-conn-send!
   (http-conn-open
    myUrl
    #:ssl? #t)
   #:version "1.1"
   #:method "POST"
   #:data "Hello")

但是我收到以下错误:

tcp-connect: connection failed
  detail: host not found
  address: https://www.w3.org/
  port number: 443
  step: 1
  system error: nodename nor servname provided, or not known; errno=8

我尝试了几个不同的地址。

我是球拍和编程的新手,无法弄清楚我错过了什么。

在您的示例中,主机名只是 www.w3.org 部分——不包括方案(http 或 https)或任何路径。因此,例如这确实有效:

(http-conn-open "www.w3.com"
                #:ssl? #t)

要发出 post 请求,您可以这样做:

#lang racket

(require net/http-client)

(define-values (status headers in)
  (http-sendrecv "www.w3.com"
                 "/"
                 #:ssl? #t
                 #:version "1.1"
                 #:method "POST"
                 #:data "Hello"))
(displayln status)
(displayln headers)
(displayln (port->string in))
(close-input-port in)

在 Racket 中,一个函数可以 return 多个值。 http-sendrecv return 三个,define-values 将每个分配给一个变量。

net/http-client 提供其他功能让您可以连接到主机,在该连接上发出多个请求,然后关闭连接。