Changeset 29920 in project


Ignore:
Timestamp:
10/13/13 21:00:54 (8 years ago)
Author:
sjamaan
Message:

http-client: Improved error messages (show a stringified URI), and don't update cookies when response is not available

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/http-client/trunk/http-client.scm

    r29917 r29920  
    477477                                (http-client-error 'authenticate-request
    478478                                                   "Unknown authentication type"
    479                                                    (list request)
     479                                                   (list authtype)
    480480                                                   'unknown-authtype
    481                                                    'authtype authtype))))
     481                                                   'authtype authtype
     482                                                   'request request))))
    482483    (authenticator response resp-header request req-header
    483484                   auth-uri realm writer)))
     
    517518                                      (keep-alive? response))
    518519                           (close-connection! con)))))
    519         (process-set-cookie! con (request-uri req) response)
     520        (when response (process-set-cookie! con (request-uri req) response))
    520521        (case (and response (response-code response))
    521522          ((#f)
    522523           (http-client-error 'send-request
    523524                              "Server closed connection before sending response"
    524                               (list req)
     525                              (list (uri->string (request-uri req)))
    525526                              'premature-disconnection
    526                               'uri new-uri))
     527                              'uri (request-uri req) 'request req))
    527528          ;; TODO: According to spec, we should provide the user with a choice
    528529          ;; when it's not a GET or HEAD request...
     
    534535           (when (= (response-code response) 303)
    535536             (request-method-set! req 'GET)) ; Switch to GET
    536            (let ((new-uri (header-value 'location (response-headers response))))
     537           (let* ((loc-uri (header-value 'location (response-headers response)))
     538                  (new-uri (uri-relative-to loc-uri (request-uri req))))
    537539             (if (or (not (max-redirect-depth)) ; unlimited?
    538540                     (< redirects (max-redirect-depth)))
    539541                 (loop attempts
    540542                       (add1 redirects)
    541                        (update-request req uri: (uri-relative-to
    542                                                  new-uri (request-uri req))))
     543                       (update-request req uri: new-uri))
    543544                 (http-client-error 'send-request
    544545                                    "Maximum number of redirects exceeded"
    545                                     (list req)
     546                                    (list (uri->string (request-uri request)))
    546547                                    'redirect-depth-exceeded
    547                                     'uri new-uri))))
     548                                    'uri (request-uri req)
     549                                    'new-uri new-uri 'request req))))
    548550          ;; TODO: Test this
    549551          ((305)                        ; Use proxy (for this request only)
     
    664666(define (call-with-input-request uri-or-request writer reader)
    665667  (let* ((type #f)
     668         (uri (cond ((uri? uri-or-request) uri-or-request)
     669                    ((string? uri-or-request) (uri-reference uri-or-request))
     670                    (else (request-uri uri-or-request))))
     671         (req (if (request? uri-or-request)
     672                  uri-or-request
     673                  (make-request uri: uri method: (if writer 'POST 'GET))))
    666674         (chunks (cond
    667675                  ((string? writer) (list (list writer)))
     
    683691                                    'call-with-input-request
    684692                                    "Invalid form data!"
    685                                     (list uri-or-request writer reader)
    686                                     'formdata-error)))))
    687                    (else #f)))
    688          (uri (cond ((uri? uri-or-request) uri-or-request)
    689                     ((string? uri-or-request) (uri-reference uri-or-request))
    690                     (else (request-uri uri-or-request))))
    691          (req (if (request? uri-or-request)
    692                   uri-or-request
    693                   (make-request uri: uri method: (if writer 'POST 'GET))))
     693                                    (list (uri->string uri) writer reader)
     694                                    'form-data-error
     695                                    'request req
     696                                    'form-data writer)))))
     697                  (else #f)))
    694698         (req (update-request
    695699               req
     
    729733                       (response-code response) (response-reason response))
    730734              ;; arguments
    731               (list uri)
     735              (list (uri->string uri))
    732736              ;; Specific type
    733737              (case (response-class response)
Note: See TracChangeset for help on using the changeset viewer.