在Racket中发送HTTP POST

Jes*_*wak 4 lisp post network-programming http racket

我试图通过在Racket中的http/post发送一个字符串,这是我在阅读Racket HTTP客户端文档后到目前为止所尝试的

#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")
Run Code Online (Sandbox Code Playgroud)

但是有了这个,我收到以下错误:

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
Run Code Online (Sandbox Code Playgroud)

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

我是新手一般的编程和编程,无法弄清楚我错过了什么.

Gre*_*ott 8

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

(http-conn-open "www.w3.com"
                #:ssl? #t)
Run Code Online (Sandbox Code Playgroud)

要发布帖子请求,您可以这样做:

#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)
Run Code Online (Sandbox Code Playgroud)

在Racket中,函数可以返回多个值.http-sendrecv返回三,define-values并将每一个赋值给一个变量.

net/http-client 提供其他功能,让您与主机建立连接,在该连接上发出多个请求,然后关闭连接.

  • 另外,我相信原始示例缺少`http-conn-send!`所需的"uri"参数 (3认同)