Merge branch 'master' of git://github.com/abeaumont/factor

db4
Slava Pestov 2009-07-09 06:20:58 -05:00
commit 522da6fc0f
4 changed files with 11 additions and 7 deletions

View 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 ]
[ ]

View 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

View 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>

View File

@ -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 ;