]> gitweb.factorcode.org Git - factor.git/commitdiff
Added support for custom redirect number in http requests
authorAlfredo Beaumont <alfredo.beaumont@gmail.com>
Thu, 18 Jun 2009 18:47:08 +0000 (20:47 +0200)
committerAlfredo Beaumont <alfredo.beaumont@gmail.com>
Thu, 18 Jun 2009 18:47:08 +0000 (20:47 +0200)
basis/http/client/client.factor
basis/http/client/debugger/debugger.factor
basis/http/http-docs.factor
basis/http/http.factor

index 2f6bcfafe9540150229b2ce27c5db7c9c85ce004..016e347e89bc2b66d62d5c2a8a983f3215cef796 100644 (file)
@@ -12,8 +12,6 @@ IN: http.client
 
 ERROR: too-many-redirects ;
 
-CONSTANT: max-redirects 10
-
 <PRIVATE
 
 : write-request-line ( request -- request )
@@ -79,7 +77,7 @@ SYMBOL: redirects
 
 :: do-redirect ( quot: ( chunk -- ) response -- response )
     redirects inc
-    redirects get max-redirects < [
+    redirects get request get redirects>> < [
         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 ]
                         [ ]
index 413ae7bd85e3e839c074d40601baf0d393878f13..3688f3819381c49243d1a3fbc1d38b2f2283c699 100644 (file)
@@ -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
index 210066176f6ecd1378c4b18384c92e22bc48e782..e7ff38ac42eeee02db3e6f0c72c7c886049a38f8 100644 (file)
@@ -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: <response>
index 2b68edfb8e3f0f6e50873e21d5bd6426c9fc0884..4c32954eee29cddac0b1de331530209bb6ec3e02 100755 (executable)
@@ -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 ;