diff --git a/basis/http/client/client.factor b/basis/http/client/client.factor index 2f6bcfafe9..016e347e89 100644 --- a/basis/http/client/client.factor +++ b/basis/http/client/client.factor @@ -12,8 +12,6 @@ IN: http.client ERROR: too-many-redirects ; -CONSTANT: max-redirects 10 - > < [ request get clone response "location" header redirect-url response code>> 307 = [ "GET" >>method ] unless @@ -116,7 +114,8 @@ SYMBOL: redirects with-output-stream* ] [ in>> [ - read-response dup redirect? [ t ] [ + read-response dup redirect? + request get redirects>> 0 > and [ t ] [ [ nip response set ] [ read-response-body ] [ ] diff --git a/basis/http/client/debugger/debugger.factor b/basis/http/client/debugger/debugger.factor index 413ae7bd85..3688f38193 100644 --- a/basis/http/client/debugger/debugger.factor +++ b/basis/http/client/debugger/debugger.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: kernel summary debugger io make math.parser -prettyprint http.client accessors ; +prettyprint http http.client accessors ; IN: http.client.debugger M: too-many-redirects summary diff --git a/basis/http/http-docs.factor b/basis/http/http-docs.factor index 210066176f..e7ff38ac42 100644 --- a/basis/http/http-docs.factor +++ b/basis/http/http-docs.factor @@ -17,6 +17,7 @@ $nl { { $slot "header" } { "An assoc of HTTP header values. See " { $link "http.headers" } } } { { $slot "post-data" } { "See " { $link "http.post-data" } } } { { $slot "cookies" } { "A sequence of HTTP cookies. See " { $link "http.cookies" } } } + { { $slot "redirects" } { "Number of redirects to attempt before throwing an error. Default is " { $snippet "max-redirects" } " ." } } } } ; HELP: diff --git a/basis/http/http.factor b/basis/http/http.factor index 2b68edfb8e..4c32954eee 100755 --- a/basis/http/http.factor +++ b/basis/http/http.factor @@ -10,6 +10,8 @@ http.parsers base64 ; IN: http +CONSTANT: max-redirects 10 + : (read-header) ( -- alist ) [ read-crlf dup f like ] [ parse-header-line ] produce nip ; @@ -137,7 +139,8 @@ url version header post-data -cookies ; +cookies +redirects ; : set-header ( request/response value key -- request/response ) pick header>> set-at ; @@ -154,7 +157,8 @@ cookies ; H{ } clone >>header V{ } clone >>cookies "close" "connection" set-header - "Factor http.client" "user-agent" set-header ; + "Factor http.client" "user-agent" set-header + max-redirects >>redirects ; : header ( request/response key -- value ) swap header>> at ;