【问题标题】:Racket upload zip file with parameters through http-client or post-impure-portRacket 通过 http-client 或 post-impure-port 上传带参数的 zip 文件
【发布时间】:2016-01-08 08:30:39
【问题描述】:

我想使用 http-conn-send 将 zip 文件上传到服务器!或后不纯端口(或后纯端口)。这是我的代码:

(define post
  (lambda (url data header)
    (call/input-url url
                    (lambda (url header)
                      (post-impure-port url data header))
                    port->string
                    header)))

;;; header
(define header 
 '("Content-Type: multipart/form-data"))

;;; some parameters
(define param `((resource_name . "google")
                (version_name . "5.2")
                (inner_version . "2.0")
                (type . "GAME")
                (sdk_id . "AndGoogle")
                (for_platform . "Android")
                (update_log . "test")))

(define data 
 (bytes-append
  (string->bytes/utf-8 
  (alist->form-urlencoded param))
  #"&file="
  (file->bytes "file.zip")))

(post url data header)

但是输出是错误的,谁能告诉我怎么了?

谢谢。

编辑

服务器响应

HTTP/1.1 500 内部服务器错误

服务器:Apache-Coyote/1.1

X-Application-Context:应用程序:生产

内容长度:0

日期:2016 年 1 月 9 日星期六 01:53:29 GMT

连接:关闭

我想知道我是否应该添加一些这样的代码,虽然它也不起作用:

(define CRLF "\r\n")
(define boundary "-------------------------RacketFormBoundaryf1nfLeDGcfc30oHf")

(define upload-file (file->bytes "AndGoogle.zip"))

(define data
  (bytes-append
   (->bytes (string-append
             "--" boundary CRLF
             "Content-Disposition: form-data; name=\"resource_name\"" CRLF
             "AndGoogle" CRLF
             "--" boundary CRLF
             "Content-Disposition: form-data; name=\"version_name\"" CRLF
             "5.2" CRLF
             "--" boundary CRLF
             "Content-Disposition: form-data; name=\"file\"; filename=\"AndGoogle.zip\"" CRLF
             "Content-Type: application/zip" CRLF))
   upload-file
   (->bytes (string-append CRLF "--" boundary "--" CRLF))))

(define header
  (list (string-append "Content-Type: multipart/form-data; boundary=" boundary)
        (string-append "Content-Length: " (number->string (bytes-length data)))))

(post url data header)

【问题讨论】:

  • 您可以编辑您的帖子并添加运行此程序时收到的错误消息吗?
  • @AsumuTakikawa 抱歉,我手头没有错误消息。我记得错误类似于“http/1.1 code:500, server internal error”。

标签: http post racket


【解决方案1】:

在获得谷歌球拍用户组的帮助后,我知道如何做到这一点,只需将两个 CRLF 添加到表单的子标题中。如下:

(define data
  (bytes-append
   (->bytes (string-append
             "--" boundary CRLF
             "Content-Disposition: form-data; name=\"resource_name\"" CRLF
             CRLF
             "AndGoogle" CRLF
             "--" boundary CRLF
             "Content-Disposition: form-data; name=\"version_name\"" CRLF
             CRLF
             "5.2" CRLF
             "--" boundary CRLF
             "Content-Disposition: form-data; name=\"file\"; filename=\"AndGoogle.zip\"" CRLF
             "Content-Type: application/zip" CRLF 
             CRLF))
   upload-file
   (->bytes (string-append CRLF "--" boundary "--" CRLF))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-22
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多